2011-10-14 2 views
5

È possibile riutilizzare più pagine collegate a oggetti diversi?Riutilizzo della stessa pagina più volte

Ho una pagina in cui è possibile inserire informazioni personali (nome, indirizzo, numero sociale, ...) connettersi a un bean: prospect. In alcune occasioni devo raccogliere informazioni personali collegate. esempio per il punteggio di credito (una persona e un garante).

Quindi volevo usare con 2 include. Ma come posso assicurarmi che include1 contenga le informazioni per person1 e include2 contiene le informazioni per 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> 

e 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> 

ho trovato 2 arounds di lavoro possibile: -duplicate pagina e definire 2 fagioli in faces-config (che punta alla stessa classe java) -non utilizzare tabpanel e includi, ma inserisci info person1, quindi salvalo e carica le informazioni su person2 e salva person2.

Soluzione alternativa1 punto negativo è che sta mantenendo lo stesso codice due volte. Workaround2 punto negativo è che non è così 'fresco' (punto usso di vista)

risposta

7

È possibile utilizzare <ui:param> passare parametri al <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> 

Con l'esempio di cui sopra, in ogni includono persona desiderata sarà disponibile come #{person}. Quei tag <f:subview> servono a prevenire errori di identificazione dei componenti duplicati perché finiscono nello stesso genitore UINamingContainer.

+0

Quando faccio questo ottengo il seguente errore: javax.servlet.ServletException: ID componente prospectdetail: creditScoreView: privatePerson è già stato trovato nella vista. Come posso risolvere questo? privatePerson è un id componente utilizzato in prospect.xhtml – roel

+0

Apparentemente le schede RichFaces non sono componenti 'UINamingContainer'. Prova a inserire '' con un ID univoco attorno a' '. – BalusC

+0

Tnx, perfezione :) – roel