2011-10-14 62 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

相关问题