我正在做一个小的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>
现在,这给我带来了几个问题:
- 我需要在
<from-view-id>
中添加/faces/
吗? - 我不能只是简单地返回链接到我的类所需的页面? 我犯了什么逻辑错误,我太盲目了,看不见吗?
提前谢谢你——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>
第二,你把actionListener
和action
混在一起了。
<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">
actionListener
不支持返回导航结果。用action
代替。
<p:commandLink action="#{verifyCredentials.save(klasse, modul)}">
参见:
- action和actionListener的区别
- 如何在JSF中导航?如何使URL反映当前页面(而不是前一个)