DataTable в JSF - PullRequest
       14

DataTable в JSF

6 голосов
/ 30 августа 2011

У меня есть dataTable в jsf, как я могу получить все значения из этой таблицы.

Вот мой стол:

<h:dataTable id="dt1" value="#{Metadata.placeholders}" var="item" binding="#{Metadata.dataTable}" bgcolor="#F1F1F1" border="10" cellpadding="5" cellspacing="3" first="0" rows="4" width="40%" frame="hsides" rules="all" summary="This is a JSF code to create dataTable." >

                    <f:facet name="header">
                        <h:outputText value="Select elements for available placeholder" />
                    </f:facet> 

                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Placeholder" />
                        </f:facet> 
                        <h:outputText value="#{item.id}"/>
                    </h:column>

                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Element"/>
                        </f:facet> 
                        <h:selectOneListbox id="elements" size="1" >
                            <f:selectItems value="#{item.elements}" /> 
                        </h:selectOneListbox>
                    </h:column>

                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="Value"/>
                        </f:facet> 
                        <h:inputText></h:inputText> 
                    </h:column>

                </h:dataTable><br>

Как видите, второй и третий столбцы - это поля со списком и входным текстом, поэтому предположим, что в таблице 5 строк, а пользователь выбирает значение из списка и вводит текст в текстовое поле. я получу эти данные после того, как пользователь нажмет кнопку «отправить»?

Ответы [ 3 ]

5 голосов
/ 30 августа 2011

Просто свяжите раскрывающееся значение со свойством текущего итерированного элемента.

<h:dataTable value="#{metadata.placeholders}" var="placeholder">
    <h:column>
        <h:selectOneMenu value="#{placeholder.element}">
            <f:selectItems value="#{placeholder.elements}" /> 
        </h:selectOneMenu>
    </h:column>
</h:dataTable>
<h:commandButton value="Submit" action="#{metadata.submit}" />

(обратите внимание, что я исправил бессмысленный <h:selectOneListbox size="1"> с помощью <h:selectOneMenu>)

Когда вы отправляете форму, JSF просто устанавливает значение в свойстве element повторного объекта Placeholder. Если вы намереваетесь получить к нему доступ по отдельности, просто зацикливайтесь на placeholders в методе действия.

public void submit() {
    for (Placeholder placeholder : placeholders) {
        System.out.println(placeholder.getElement()); // Look, JSF has already set it.
    }
}
2 голосов
/ 30 августа 2011

Это просто пример кода, но идея должна быть там

for (int i = 0; i < getDataTable().getRowCount(); i++) {
    getDataTable().setRowIndex(i);
    Object object = getDataTable().getRowData();
}
1 голос
/ 30 августа 2011

Ваш список и ваш входной текст не знает, где (и как) хранить их значения. Таким образом, JSF обычно имеют управляемый компонент и преобразователь и отображают значения через атрибут-значение.

Если вы не уверены, как называются свойства, вы можете унаследовать две хеш-карты для передачи значений. например:

< ... value="#{Metadata.placeholderMap[item.id]['age']}" ... >
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...