2011-10-14 9 views
5

Có thể sử dụng lại một trang nhiều lần được đính kèm với các đối tượng khác nhau không?Sử dụng lại cùng một trang nhiều lần

Tôi có một trang là bạn có thể nhập thông tin cá nhân (tên, địa chỉ, số xã hội, ...) kết nối với một bean: khách hàng tiềm năng. Trong một số trường hợp, tôi phải thu thập thông tin cá nhân được liên kết. ví dụ cho điểm tín dụng (một người và một người bảo lãnh).

Vì vậy, tôi muốn sử dụng với 2 bao gồm. Nhưng làm thế nào tôi có thể đảm bảo include1 giữ thông tin cho person1 và include2 giữ thông tin cho 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> 

và 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> 

tôi thấy 2 xung quanh có: -duplicate trang và xác định 2 đậu trên khuôn mặt-config (trỏ đến lớp java giống nhau) -Không sử dụng TabPanel và bao gồm, nhưng nhập thông tin person1, sau đó lưu nó và tải thông tin person2 và lưu person2.

Điểm làm việc1 tiêu cực là nó đang duy trì cùng một mã hai lần. Workaround2 điểm tiêu cực là nó không phải là quá 'mát mẻ' (ux điểm)

Trả lời

7

Bạn có thể sử dụng <ui:param> để vượt qua các thông số để <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> 

Với ví dụ trên, trong mỗi bao gồm người mong muốn sẽ có sẵn dưới dạng #{person}. Các thẻ <f:subview> này là để ngăn các lỗi ID thành phần trùng lặp vì chúng kết thúc trong cùng một phụ huynh UINamingContainer.

+0

Khi tôi làm điều này tôi nhận được lỗi sau: javax.servlet.ServletException: Triển vọng thành phần ID: creditScoreView: privatePerson đã được tìm thấy trong dạng xem. Làm sao tôi có thể giải quyết việc này? privatePerson là một id thành phần được sử dụng trong prospect.xhtml – roel

+0

Rõ ràng các tab RichFaces không có thành phần 'UINamingContainer'. Hãy thử đặt '' bằng một ID duy nhất xung quanh ''. – BalusC

+0

Tnx, sự hoàn hảo :) – roel