faces-redirect=true 的导航规则不触发
Navigation rule with faces-redirect=true not firing
我正在开发一个用于练习的小网络工具,我注意到了导航规则。所以我看了几个网络教程并自己尝试了一下,但它对我不起作用。它不会重定向到所需的页面。
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>
return的class的值为<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/
吗?
- 我不能简单地 return link 到我 class 中所需的页面吗?
- 我是否犯了任何我太盲目而看不到的逻辑错误?
提前致谢
- 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 2.x 时 reading/focusing 使用 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>
其次,您将 actionListener
与 action
混合使用。
<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">
actionListener
不支持返回导航结果。请改用 action
。
<p:commandLink action="#{verifyCredentials.save(klasse, modul)}">
另请参阅:
- Differences between action and actionListener
- How to navigate in JSF? How to make URL reflect current page (and not previous one)
我正在开发一个用于练习的小网络工具,我注意到了导航规则。所以我看了几个网络教程并自己尝试了一下,但它对我不起作用。它不会重定向到所需的页面。
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>
return的class的值为<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/
吗? - 我不能简单地 return link 到我 class 中所需的页面吗?
- 我是否犯了任何我太盲目而看不到的逻辑错误?
提前致谢 - 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 2.x 时 reading/focusing 使用 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>
其次,您将 actionListener
与 action
混合使用。
<p:commandLink actionListener="#{verifyCredentials.save(klasse, modul)}">
actionListener
不支持返回导航结果。请改用 action
。
<p:commandLink action="#{verifyCredentials.save(klasse, modul)}">
另请参阅:
- Differences between action and actionListener
- How to navigate in JSF? How to make URL reflect current page (and not previous one)