2012-10-19 4 views
5

Se uso come di seguito, non ottengo nessun errore, nessuna uscita. Perché lo p:panelGrid non funziona con ui:repeat?Perché p: panelGrid non funziona con ui: repeat?

Nota: Non desidero utilizzare c:forEach perché ho già un sacco di problemi JSF.

<p:panelGrid> 
    <ui:repeat value="#{MyBean.dataList}" var="data"> 
     <p:row> 
      <p:column> 
       <h:outputText value="#{data.name}"/> 
      </p:column> 
      <p:column> 
       <h:outputText value="#{data.description}"/> 
      </p:column> 
     </p:row> 
    </ui:repeat> 
</p:panelGrid> 

MyBean.java

public List<Data> getDataList(){ 
    List<Data> result = new ArrayList<Data>(); 
    result.add(new Data("Name 1", "Description 1")); 
    result.add(new Data("Name 2", "Description 2")); 
    result.add(new Data("Name 3", "Description 3")); 
    result.add(new Data("Name 4", "Description 4")); 
    return result; 
} 

uscita previsto con primefaces

enter image description here

+0

Perché non utilizzare p: dataTable invece? p: panelGrid è pensato per tabelle statiche. – mrembisz

+0

@mrembisz Non posso usarlo a causa della mia interfaccia utente. Se vuoi la mia interfaccia utente, caricherò – CycDemo

+1

Sembra che tu non capisca la differenza tra taghandler e componenti dell'interfaccia utente. Usare 'c: forEach' non dovrebbe essere temuto, ma dovrebbe essere * capito * invece. Vedi anche http://stackoverflow.com/questions/3342984/jstl-in-jsf2-facelets-makes-sense – BalusC

risposta

6

ui:repeat non funzionerà perché non lo fa in realtà aggiungi componenti all'albero dei componenti.

ui:repeat funziona solo durante la fase di rendering e ridistribuisce i componenti figlio più volte con stato diverso.

Alcuni componenti, ad esempio panelgrid, ma anche datatable, si aspettano di avere alcuni bambini nell'albero dei componenti per funzionare correttamente. Dal momento che ui:repeat non li aggiunge, questo approccio non funziona.

Mi dispiace, ma la soluzione normale per questo è utilizzare c:foreach, che fa aggiungere figli all'albero.

Vedi http://www.ninthavenue.com.au/blog/c:foreach-vs-ui:repeat-in-facelets

0

Provalo definendo columns in p:panelGrid quando si dispone di colonne numero statici allora si dovrebbe avere definire <p:panelGrid columns=""> .Funzionerà.
Ma io suggerisco di utilizzare primefaces datatable per questo

<p:dataTable id="availableCars" var="car" value="#{tableBean.carsSmall}"> 
    <p:column style="width:20px"> 
     <h:outputText id="dragIcon" 
      styleClass="ui-icon ui-icon-arrow-4" /> 
     <p:draggable for="dragIcon" revert="true" /> 
    </p:column> 

    <p:column headerText="Model"> 
     <h:outputText value="#{car.model}" /> 
    </p:column> 

    <p:column headerText="Year"> 
     <h:outputText value="#{car.year}" /> 
    </p:column> 

    <p:column headerText="Manufacturer"> 
     <h:outputText value="#{car.manufacturer}" /> 
    </p:column> 

    <p:column headerText="Color"> 
     <h:outputText value="#{car.color}" /> 
    </p:column> 
</p:dataTable> 

Here is the link da dove si può trovare questo codice e primnefaces showcase.I pensare che soddisferà le vostre richieste

+0

Grazie, non può soddisfare il mio output previsto. Fai riferimento alla mia foto in questione. – CycDemo

+0

Perché non hai usato le primefaces datatable? Ho aggiornato la mia risposta per favore controlla .. – khan

+0

Per favore, carico la mia nuova immagine per il mio output atteso. Come posso usare datatable. – CycDemo