faces-redirect=true的导航规则不触发



我正在做一个小的webtool练习和导航规则已经引起了我的注意。所以我看了一些网络教程,并自己尝试了一下,但它不适合我。它不会重定向到所需的页面。

faces-config.xml(只有重要的部分)

    <navigation-rule>  
    <from-view-id>/kursleiter.xhtml</from-view-id>  
        <navigation-case>   
            <from-action>#{verifyCredentials.save}</from-action>
            <from-outcome>ok</from-outcome>   
            <to-view-id>/teilnehmer.xhtml?faces-redirect=true</to-view-id>  
        </navigation-case>  
</navigation-rule>

返回<from-outcome>

值的类
public class verifyCredentials() {
    public String save(Klasse klasse, Module modul) {
    //do some other stuff
    return "ok";
    }
}

当这个命令链接列表被按下时,重定向应该发生

<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">#{modul.modulnummer} </p:commandLink>

现在,这给我带来了几个问题:

  1. 我需要在<from-view-id>中添加/faces/吗?
  2. 我不能只是简单地返回链接到我的类所需的页面?
  3. 我犯了什么逻辑错误,我太盲目了,看不见吗?

提前谢谢你——Reteras

有两个错误。

首先,你在这里混合了隐式和显式导航。

<to-view-id>/teilnehmer.xhtml?faces-redirect=true</to-view-id>

faces-redirect=true查询字符串参数仅用于隐式导航,如下所示:

public String save(Klasse klasse, Module modul) {
    // ...
    return "/teilnehmer.xhtml?faces-redirect=true";
}

注意,这并不需要任何XML配置!隐式导航特性是JSF 2.0以来的新特性。也许您正在阅读/关注JSF 1。x资源而不是JSF 2。同时学习JSF 2.x。注意学习资源中提到的日期和版本。

如果您确实需要在XML中通过显式导航配置此重定向,请使用<redirect>

<navigation-case>
    <from-action>#{verifyCredentials.save}</from-action>
    <from-outcome>ok</from-outcome>
    <to-view-id>/teilnehmer.xhtml</to-view-id>
    <redirect />
</navigation-case>  

第二,你把actionListeneraction混在一起了。

<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">

actionListener不支持返回导航结果。用action代替。

<p:commandLink action="#{verifyCredentials.save(klasse, modul)}">

参见:

  • action和actionListener的区别
  • 如何在JSF中导航?如何使URL反映当前页面(而不是前一个)

最新更新