p:dataTable с динамическими столбцами

Буду признателен, если вы мне поможете, так что заранее спасибо. Я использую ПраймФейс. У меня есть динамическая таблица базы данных. У меня нет проблем с созданием этой таблицы, но я хочу просмотреть эту таблицу, используя данные и столбцы.

Вот часть, где я добавляю содержимое таблицы базы данных в ArrayList:

elts = new ArrayList<String>();

try {
    Statement stmt = conn.createStatement();
    ResultSet RS = stmt.executeQuery("SELECT * FROM temporaire");
    ResultSetMetaData metadata = RS.getMetaData();
    nombreColonnes = metadata.getColumnCount();

    for (int j = 1; j <= nombreColonnes; j++) {
        cols.add("colonne" + j);
    }

    while (RS.next()) {
        for (int i = 1; i <= nombreColonnes; i++) {
            elts.add(RS.getArray(i).toString());
        }
    }

и код xhtml datatable:

<p:dataTable value="#{templateBean.elts}" var="elts" rowIndexVar="indro"  rows="10"
             paginator="true"
             paginatorTemplate="{CurrentPageReport}  {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"
             columnsPerPageTemplate="5,10,15">
    <p:columns value="#{templateBean.cols}" var="cols" columnIndexVar="index">
        <f:facet name="header">
            <h:outputText value="#{cols}"/>
        </f:facet>
        <h:outputText value="#{elts}"/>
    </p:columns>
</p:dataTable>

и проблема в том, что данные, которые я получаю, повторяют один и тот же элемент в каждой строке следующим образом:

col1Content | col1Content |col1Content | col1Content 
col2Content |col2Content |col2Content |col2Content 
...

Не могли бы вы помочь мне, где проблема и что не так с моим кодом? Спасибо


person faika bouthalja    schedule 17.04.2015    source источник
comment
Это #{templateBean.cols} будет оцениваться как одно и то же значение на каждой итерации <p:dataTable>. Вам нужно получить другое значение (объект) из управляемого компонента на основе строки <p:dataTable>, которая в данный момент повторяется. Вы можете рассмотреть java.util.Map для этой цели, в котором вы можете передать значение ключа на основе элемента таблицы данных, который в настоящее время повторяется, чтобы получить элемент, связанный с этим ключом, на каждой итерации <p:dataTable>.   -  person Tiny    schedule 18.04.2015
comment
Вам также не нужно использовать <f:facet name="header"> в этом случае, чтобы поместить заголовок в каждый динамически генерируемый столбец. Вместо этого есть свойство headerText, связанное с <p:columns>, например <p:columns headerText="#{cols}" .../>. Также удалите columnIndexVar, если он не нужен.   -  person Tiny    schedule 18.04.2015
comment
Также нет такого атрибута columnsPerPageTemplate, связанного с <p:dataTable>. Вместо этого rowsPerPageTemplate. См. также соответствующий вопрос.   -  person Tiny    schedule 18.04.2015
comment
спасибо, у меня сработало использование ArrayList‹Object[]› для хранения содержимого таблицы базы данных. Спасибо за подсказки Tiny :)   -  person faika bouthalja    schedule 19.04.2015