JSF移动/重定向到另一个包含数据的页面

时间:2010-09-21 14:21:53

标签: java jsf redirect

我有一个显示数据表的JSP页面(page1.jsp)。表格中还有如下按钮:

<h:column>
    <f:facet name="header" >
        <h:outputText value=""/>
    </f:facet>
    <h:commandButton value="Show items" action="#{firstBean.displayItems}" immediate="true" />
</h:column>

豆子:

public void displayItems() throws IOException {
    MyClass theClass = (MyClass) dataTable.getRowData();
    String theId = theClass.getIdentityNumber();
    // ...
}

当我们点击按钮时,我想移动到另一个JSP页面(page2.jsp)。在第2页,还有一个数据表。该表是通过调用名为“facade”的bean和一个参数(String-id)创建的。即按下按钮时,我想转到JSP第2页,此页面将根据以下调用显示数据表:

myList = facade.getDeliveriesById(theId);

所以第2页依赖于第1页的内容,要么是字符串id,要么可以某种方式设置列表?

我想问题是:

  • 在提取此ID后,“firstBean.displayItems”是否应该使用“get”参数重定向到jsp第2页?(见上文)?
  • 有没有办法在第一页的“firstBean.displayItems”中设置要使用的列表?

在JSF(带数据)中从一个页面转到另一个页面的正常方法是什么?

1 个答案:

答案 0 :(得分:2)

在JSF 1.x中,通常的方法是返回String作为导航案例结果。

public String displayItems() throws IOException {
    MyClass theClass = (MyClass) dataTable.getRowData();
    String theId = theClass.getIdentityNumber();
    return "page2";
}

faces-config.xml中的以下条目结合使用:

<navigation-rule>
    <navigation-case>
        <from-outcome>page2</from-outcome>
        <to-view-id>/page2.jsf</to-view-id>
    </navigation-case>
</navigation-rule>

然后转到page2.jsf

在JSF 2.x上,您不需要faces-config.xml。只需返回没有扩展名的确切文件名,例如"page2"然后JSF会自动找到正确的视图。这称为implicit navigation


更新:您似乎每页都有一个“控制器”bean,并且您希望在这些bean之间共享数据而不引用其中的其他 bean页。很合理。这可以通过将数据拆分到另一个托管bean中来实现,该托管bean将作为托管属性注入两个“控制器”bean中。

E.g。

public class ControllerBean1 {
    private DataBean dataBean;

    public String submit() {
        MyClass theClass = (MyClass) dataTable.getRowData();
        String theId = theClass.getIdentityNumber();
        dataBean.setTheId(theId);
        return "page2";
    }

    // ...
}

并且

public class ControllerBean2 {
    private DataBean dataBean;

    // ...
}

您可以在page2中访问它,如下所示:

<h:outputText value="#{controllerBean2.dataBean.theId}" />

在JSF 1.x中,您需要在faces-config中通过<managed-property>注入它。您可以在this article中找到示例。在JSF 2.x中,您只需使用@ManagedProperty注释托管属性即可。 在以后的问题中,请提及您正在使用的JSF版本。通过这种方式,我们可以在没有噪音的情JSF 2.x在如何处理事物方面存在很多差异(改进)。