Как создать компонент, подобный данным, но с программной вставкой столбцов?

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