多次重复使用同一页面

roe*_*oel 5 java xhtml jsf include

是否可以多次重复使用一个页面连接到不同的对象?

我有一个页面,你可以输入个人信息(姓名,地址,社会号码,......)连接到一个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>
Run Code Online (Sandbox Code Playgroud)

和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>
Run Code Online (Sandbox Code Playgroud)

我找到了两个可能的解决方法: - 重复页面并在faces-config中定义2个bean(指向同一个java类) - 不使用tabpanel和include,但输入person1信息,然后保存并加载person2信息并保存person2 .

解决方法1的负面影响是它保持两次相同的代码.解决方法2的负面观点是,它不是那么"酷"(从众不同的角度来看)

Bal*_*usC 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>
Run Code Online (Sandbox Code Playgroud)

通过上面的例子,在每个包括所需的人将可用#{person}.这些<f:subview>标记用于防止重复的组件ID错误,因为它们最终位于同一UINamingContainer父级中.