2010-07-29 11 views
13

In JSF, h:dataTable e h:panelGrid entrambi creano HTML table -tags.JSF: h: dataTable vsh: panelGrid

Qual è la differenza tra entrambi?

Quando utilizzare l'uno o l'altro?

+5

In un dado: utilizzare 'h: dataTable' per una tabella dinamica e' h: panelGrid' per una tabella statica. – BalusC

risposta

15

Come indica il nome, h:dataTable viene utilizzato principalmente per la visualizzazione di una tabella contenente i dati di alcuni dei modelli dell'applicazione. Here is an usage example.

  <h:dataTable value="#{dataTableBean.items}" var="item"> 
       <h:column> 
        <f:facet name="header" > 
         <h:outputText value="Item Category"/> 
        </f:facet>  
        <h:outputText value="#{item.category}"/> 
       </h:column> 
      </h:dataTable> 

Il h:panelGrid viene utilizzato principalmente per il layout e sistemazione di elementi scopo. Here is an usage example.

<h:panelGrid id="panel" columns="2" border="1"> 
    <h:outputText value="First Name:" /> 
    <h:inputText id="first" value="#{backingBean.user.firstName}" /> 
    <h:outputText value="Last Name:" /> 
    <h:inputText id="last" value="#{backingBean.user.lastName}" /> 
</h:panelGrid> 
3

È necessario utilizzare un panelGrid quando si conosce il numero di righe e colonne che si desidera visualizzare, è necessario definire tutti i componenti figlio da soli (manualmente, il panelGrid non aggiungerà alcuna riga/collumns da stesso) e il panelGrid li sistemerà. DataGrid invece viene utilizzato quando si dispone di una struttura dati (come una raccolta) con una dimensione indeterminata, quindi è sufficiente specificare le colonne che si desidera stampare e il dataGrid verrà iterato su quella raccolta creando una riga per ogni voce .

5

Il dataTable è un componente di uscita model-drivendata. Per ogni riga del modello, il componente può impostare lo stato dei relativi figli per ogni fase di JSF lifecycle. Questo comportamento è benefico o dannoso a seconda di ciò che stai cercando di ottenere.

Al contrario, lo panelGrid è solo un layout control.

La differenza è (molto) approssimativamente analoga alla differenza tra JTable e JPanel.

Problemi correlati