我有三个XHTML页面;
在index.xhtml
页面中,我有一个commandButton
,可将用户发送到page_1.xhtml
。所有这些都在faces-config.xml
的导航规则中完成。
如果假设两个page_2.xhtml
'操作都链接到支持Java类,我将如何使用另一个index.xhtml
将用户重定向到commandButton
?
答案 0 :(得分:20)
只需将按钮绑定到不同的操作方法,每个操作方法都返回不同的结果。
<h:commandButton value="Go to page 1" action="#{bean.goToPage1}" />
<h:commandButton value="Go to page 2" action="#{bean.goToPage2}" />
与
public String goToPage1() {
// ...
return "page_1";
}
public String goToPage2() {
// ...
return "page_2";
}
不需要导航案例。 JSF 2.0支持隐式导航。导航结果可以是所需目标视图的路径/文件名。结果中的文件扩展名是可选的。
如果您不一定需要对导航执行任何业务操作,或者您可以在目标页面的辅助bean的(post)构造函数中执行此操作,那么您也可以将结果值放入直接action
。
<h:commandButton value="Go to page 1" action="page_1" />
<h:commandButton value="Go to page 2" action="page_2" />
但<h:commandButton>
不会执行重定向,而是执行转发。最终用户将不会在浏览器地址栏中看到更改的URL。目标页面不可收藏。如果可以,我建议改为使用<h:button>
。
<h:button value="Go to page 1" outcome="page_1" />
<h:button value="Go to page 2" outcome="page_2" />
或者,如果确实需要调用业务操作,但想要执行实际重定向,则将faces-redirect=true
作为查询字符串附加到结果值。
public String goToPage1() {
// ...
return "page_1?faces-redirect=true";
}
public String goToPage2() {
// ...
return "page_2?faces-redirect=true";
}
答案 1 :(得分:0)
添加两个导航案例,如下所示。在动作方法中,返回与按钮对应的结果。
<navigation-rule>
<from-view-id>index.html</from-view-id>
<navigation-case>
<from-outcome>page1</from-outcome>
<to-view-id>page_1.xhtml</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>page2</from-outcome>
<to-view-id>page_2.xhtml</to-view-id>
</navigation-case>
</navigation-rule>