2010-07-29 11 views
13

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?

+5

W nakrętce: użyj 'h: dataTable' dla tabeli dynamicznej i' h: panelGrid' dla tabeli statycznej. – BalusC

Odpowiedz

15

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

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 .

5

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.

Powiązane problemy