JSF: h: dataTable vs h: panelGrid

В JSF, h:dataTable и h:panelGrid создаются html table -tags.

В чем разница между ними?

Когда использовать тот или иной?

Ответы

Ответ 1

Как видно из названия, h:dataTable используется в основном для отображения таблицы, содержащей данные из некоторых моделей вашего приложения. Вот пример использования.

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

h:panelGrid используется в основном для компоновки и размещения элементов. Вот пример использования.

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

Ответ 2

dataTable является моделью data компонент вывода. Для каждой строки вашей модели компонент может установить состояние своих дочерних элементов для каждой фазы panelGrid - это просто управление компоновкой.

Разница (очень) примерно аналогична разнице между JTable и JPanel.

Ответ 3

Вы должны использовать panelGrid, когда знаете количество строк и столбцов, которые вы хотите отобразить, вы должны сами определить все дочерние компоненты (вручную, panelGrid не будет добавлять какие-либо строки/столбцы сами по себе) и panelGrid устроит их. DataGrid, с другой стороны, используется, когда у вас есть структура данных (например, коллекция) с неопределенным размером, тогда вам просто нужно указать столбцы, которые вы хотите распечатать, и dataGrid будет перебирать эту коллекцию, создавая строку для каждой записи.