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?
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?
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>
È 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 .
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.
In un dado: utilizzare 'h: dataTable' per una tabella dinamica e' h: panelGrid' per una tabella statica. – BalusC