В JSF, h:dataTable
и h:panelGrid
создаются html table
-tags.
В чем разница между ними?
Когда использовать тот или иной?
В JSF, h:dataTable
и h:panelGrid
создаются html table
-tags.
В чем разница между ними?
Когда использовать тот или иной?
Как видно из названия, 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>
dataTable является моделью data компонент вывода. Для каждой строки вашей модели компонент может установить состояние своих дочерних элементов для каждой фазы panelGrid - это просто управление компоновкой.
Разница (очень) примерно аналогична разнице между JTable и JPanel.
Вы должны использовать panelGrid, когда знаете количество строк и столбцов, которые вы хотите отобразить, вы должны сами определить все дочерние компоненты (вручную, panelGrid не будет добавлять какие-либо строки/столбцы сами по себе) и panelGrid устроит их. DataGrid, с другой стороны, используется, когда у вас есть структура данных (например, коллекция) с неопределенным размером, тогда вам просто нужно указать столбцы, которые вы хотите распечатать, и dataGrid будет перебирать эту коллекцию, создавая строку для каждой записи.