W JSF, h:dataTable
i h:panelGrid
oba tworzą html table
-tagi.JSF: h: dataTable vs h: panelGrid
Jaka jest różnica między oboma?
Kiedy korzystać z jednego lub drugiego?
W JSF, h:dataTable
i h:panelGrid
oba tworzą html table
-tagi.JSF: h: dataTable vs h: panelGrid
Jaka jest różnica między oboma?
Kiedy korzystać z jednego lub drugiego?
Jak wskazuje nazwa h:dataTable
służy głównie do wyświetlania tabeli zawierającej dane z niektórych modeli w aplikacji. 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>
The h:panelGrid
służy głównie do układu i umieszczania elementów celu. 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>
Należy użyć panelGrid gdy wiesz liczbę wierszy i kolumn, które chcesz wyświetlić, trzeba określić wszystkie elementy podrzędne siebie (ręcznie, panelGrid nie dodawać żadnych wierszy/Collumns przez sama) i panelGrid je rozmieści. DataGrid z drugiej strony jest używany, gdy masz strukturę danych (jak kolekcja) o nieokreślonym rozmiarze, musisz tylko określić kolumny, które chcesz wydrukować, a dataGrid będzie iterować nad tą kolekcją, tworząc wiersz dla każdego wpisu .
The dataTable jest komponentem wyjściowym model-drivendata. Dla każdego wiersza w modelu komponent może ustawić stan jego potomków dla każdej fazy modelu JSF lifecycle. To zachowanie jest korzystne lub szkodliwe w zależności od tego, co próbujesz osiągnąć.
W przeciwieństwie do tego, panelGrid to tylko layout control.
Różnica jest (bardzo) mniej więcej analogiczna do różnicy między JTable a JPanel.
W nakrętce: użyj 'h: dataTable' dla tabeli dynamicznej i' h: panelGrid' dla tabeli statycznej. – BalusC