JSF重定向到另一个页面

时间:2012-02-27 10:15:58

标签: jsf redirect submit

我有三个XHTML页面;

  1. 的index.xhtml
  2. page_1.xhtml
  3. page_2.xhtml
  4. index.xhtml页面中,我有一个commandButton,可将用户发送到page_1.xhtml。所有这些都在faces-config.xml的导航规则中完成。

    如果假设两个page_2.xhtml'操作都链接到支持Java类,我将如何使用另一个index.xhtml将用户重定向到commandButton

2 个答案:

答案 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>
相关问题