#jsf-2 #datatable
#jsf-2 #datatable
Вопрос:
Мне нужно отобразить двумерную таблицу с большим количеством столбцов и строк, и два измерения не являются фиксированными. При использовании JSF2 DataTable существует ограничение, заключающееся в том, что количество столбцов не может быть динамическим: каждый столбец должен иметь соответствующий тег jsf. Есть ли способ программно вставить столбцы как для строк в DataTable? Также panelGrid не подходит, потому что вам нужно указывать и записывать все теги вручную. Я предпочитаю не использовать javascript для создания такого компонента, я хотел бы максимально использовать JSF2.
Ответ №1:
В стандартном наборе компонентов JSF нет такого компонента, в котором он был бы логически назван <h:columns>
. Однако существуют сторонние библиотеки компонентов, которые имеют такой компонент. Например, Tomahawk с <t:columns>
помощью и PrimeFaces с. <p:columns>
Компоненты Tomahawk не создают никаких дополнительных look’n’feel, так что это идеально, если вы хотите получить полный контроль над CSS самостоятельно. Программа PrimeFaces one генерирует настраиваемый внешний вид с помощью CSS-фреймворка themeroller, так что это идеально, если вы хотите использовать themeroller для управления внешним видом.
Вот пример того, как вы могли бы использовать Tomahawk <t:columns>
, скопированный и слегка измененный из документации по тегам:
<t:dataTable value="#{bean.rows}" var="row">
<t:columns value="#{bean.columns}" var="column">
<f:facet name="header">
<h:outputText value="#{column.name}"/>
</f:facet>
<h:outputText value="#{row[column.name]}"/>
</t:columns>
</t:dataTable>