2010-09-21 93 views
0

我有一個顯示數據表的JSP頁面(page1.jsp)。也有在該表的按鈕是這樣的:JSF移動/重定向到其他數據頁面

<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); 

SO 2頁依賴於東西從第1頁,無論是一個字符串ID,或者如果可以設置一個列表?

我想這個問題是:

  • 我應該在「firstBean.displayItems」做一個重定向到的jsp第2頁有「得」 paramater,提取該ID(見上文)之後?
  • 在「firstBean.displayItems」中,有沒有第2頁的設置列表的方法?

在JSF(帶數據)中從一個頁面到另一個頁面的正常方式是什麼?

回答

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中的託管屬性注入。

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中,你需要通過<managed-property>在臉上-config來注入它。你可以在this article找到一個例子。在JSF 2中。x您可以使用@ManagedProperty註釋託管資產。 在未來的問題中,請提及您使用的JSF版本。通過這種方式,我們可以給出更詳細的適合答案,而不會產生噪音JSF 2.x在需要接觸事物方面有很多不同(改進)。

+0

和第2頁如何獲得 「theId」? – Jojje 2010-09-21 14:32:33

+0

只需通過訪問bean屬性通常JSF的方式,比如'#{bean.theId}'。 – BalusC 2010-09-21 14:36:54

+0

這只是第2頁使用不同的「ManagedBean」(或Controller),這樣可能很難,我認爲。 – Jojje 2010-09-21 14:40:14