2011-10-14 94 views
5

是否可以多次重複使用連接到不同對象的一個​​頁面?多次重複使用同一頁面

我有一個頁面,你可以輸入個人信息(姓名,地址,社交號碼......)連接到一個bean:前景。 在某些情況下,我必須收集關聯的個人信息。信用評分的例子(一個人和一個擔保人)。

所以我想用2包括。但是,如何確保include1包含person1的信息,並且include2是否包含person2的信息?

<rich:tabPanel id="creditScoreTab" switchType="client" > 
    <rich:tab id="mainContractor" > 
    <ui:include src="includes/prospect.xhtml" /> 
    </rich:tab> 
    <rich:tab id="guarantor"> 
    <ui:include src="includes/prospect.xhtml" /> 
    </rich:tab> 
</rich:tabPanel> 

和FacesContext的

<managed-bean> 
    <managed-bean-name>prospect</managed-bean-name> 
    <managed-bean-class>be.foo.Prospect</managed-bean-class> 
    <managed-bean-scope>view</managed-bean-scope> 
</managed-bean> 

我發現了2個可能的變通: -duplicate的頁面,並定義2種豆在臉上,配置(指向同一個Java類) - 不要使用一個tabpanel並輸入person1信息,然後保存並加載person2信息並保存person2。

解決方法1的缺點是它保持兩次相同的代碼。 Workaround2負的一點是,它不是那麼「酷」(視UX點)

回答

7

可以使用<ui:param>將參數傳遞到<ui:include>

<rich:tabPanel id="creditScoreTab" switchType="client" > 
    <rich:tab id="mainContractor" > 
    <f:subview id="mainContractorView"> 
     <ui:include src="includes/prospect.xhtml"> 
     <ui:param name="person" value="#{bean.person1}" /> 
     </ui:include> 
    </f:subview> 
    </rich:tab> 
    <rich:tab id="guarantor"> 
    <f:subview id="guarantorView"> 
     <ui:include src="includes/prospect.xhtml"> 
     <ui:param name="person" value="#{bean.person2}" /> 
     </ui:include> 
    </f:subview> 
    </rich:tab> 
</rich:tabPanel> 

隨着上述例子中,在每一個包括所期望的人將以#{person}的形式提供。那些<f:subview>標籤是爲了防止重複的組件ID錯誤,因爲它們最終在同一個UINamingContainer父項中。

+0

當我這樣做時,我得到以下錯誤:javax.servlet.ServletException:組件ID prospectdetail:creditScoreView:privatePerson已在視圖中找到。我該如何解決這個問題? privatePerson是一個用在prospect.xhtml – roel

+0

中的組件ID。顯然,RichFaces標籤不是'UINamingContainer'組件。嘗試在''周圍加上一個唯一的ID''。 – BalusC

+0

Tnx,完美:) – roel

相關問題