JSF中的DataTable

adg*_*gfs 6 java datatable jsf

我在jsf中有一个dataTable,我如何从该表中获取所有值.

这是我的表:

<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>
Run Code Online (Sandbox Code Playgroud)

如您所见,第二列和第三列是列表框和输入文本字符,因此假设该表有5行,用户从列表框中选择一个值并在文本字段中输入文本,那么我怎么能得到它用户按"提交"按钮后的数据?

Bal*_*usC 5

只需将下拉列值绑定到当前迭代项的属性即可.

<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}" />
Run Code Online (Sandbox Code Playgroud)

(注意我<h:selectOneListbox size="1">用a 修复了无意义<h:selectOneMenu>)

提交表单时,JSF只会element在迭代Placeholder对象的属性中设置值.如果您打算单独访问它,只需placeholders在操作方法中循环.

public void submit() {
    for (Placeholder placeholder : placeholders) {
        System.out.println(placeholder.getElement()); // Look, JSF has already set it.
    }
}
Run Code Online (Sandbox Code Playgroud)