具有faces-redirect = true的导航规则未触发

Ret*_*ras 0 navigation jsf

我正在研究一个小型的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>
Run Code Online (Sandbox Code Playgroud)

返回值的类 <from-outcome>

public class verifyCredentials() {
    public String save(Klasse klasse, Module modul) {
    //do some other stuff
    return "ok";
    }
}
Run Code Online (Sandbox Code Playgroud)

按下此commandLink时,应该发生重定向

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

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

  1. 我会需要补充/faces/<from-view-id>
  2. 难道我只是简单地将链接返回到我班级所需的页面?
  3. 我是否犯了任何逻辑错误,我太盲目了?

提前谢谢 - Reteras

Bal*_*usC 7

有两个错误.

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

<to-view-id>/teilnehmer.xhtml?faces-redirect=true</to-view-id>
Run Code Online (Sandbox Code Playgroud)

faces-redirect=true查询字符串参数仅供隐式导航下面是使用:

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

请注意,这不需要任何XML配置!隐式导航功能是JSF 2.0以来的新功能.也许你在学习JSF 2.x时正在阅读/关注JSF 1.x资源而不是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>  
Run Code Online (Sandbox Code Playgroud)

其次,你混合actionListener使用action.

<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">
Run Code Online (Sandbox Code Playgroud)

actionListener不支持返回导航结果.请action改用.

<p:commandLink action="#{verifyCredentials.save(klasse, modul)}">
Run Code Online (Sandbox Code Playgroud)

也可以看看: