[英]JSF move / redirect to other page with data
我有一個顯示數據表的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和參數(字符串-id)來創建該表。 即,當按下按鈕時,我想移到JSP頁面2,並且此頁面將基於如下調用顯示一個數據表:
myList = facade.getDeliveriesById(theId);
因此,第2頁取決於第1頁的內容,要么是字符串ID,要么是可以設置列表的方式?
我想問題是:
在JSF中使用數據從一頁轉到另一頁的正常方法是什么?
在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將自動找到正確的視圖。 這稱為隱式導航 。
更新 :您似乎每頁只有一個“控制器” bean,並且您希望在這些bean之間共享數據,而無需引用頁面中的另一個 bean。 很合理 這可以通過將數據拆分到另一個托管bean中來實現,該托管bean將作為托管屬性注入到兩個“控制器” bean中。
例如
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>
注入它。 您可以在本文中找到一個示例。 在JSF 2.x中,您可以使用@ManagedProperty
注釋托管屬性。 在以后的問題中,請提及您使用的JSF版本。 這樣,我們可以給出更詳細的合適答案,而不會產生噪音。 JSF 2.x在處理問題的方式上有很多差異(改進)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.