JSF中的数据表



我有一个数据表在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行,用户从列表框中选择一个值,并在文本字段中输入文本,那么我如何在用户按下"提交"按钮后获得该数据?

只需将下拉值绑定到当前迭代项的属性。

<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:selectOneMenu>固定了无意义的<h:selectOneListbox size="1">)

当您提交表单时,JSF将只在迭代的Placeholder对象的element属性中设置值。如果您想单独访问它,只需在action方法中循环placeholders

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

这只是一个示例代码,但思想应该在那里

for (int i = 0; i < getDataTable().getRowCount(); i++) {
    getDataTable().setRowIndex(i);
    Object object = getDataTable().getRowData();
}

您的Listbox和Inputtext不知道在哪里(以及如何)存储它们的值。所以JSF通常有管理bean和转换器,并通过value-attribute映射值。

如果您不确定属性的名称,您可以继承两个hashmap来传递值。如:

< ... value="#{Metadata.placeholderMap[item.id]['age']}" ... >

相关内容

  • 没有找到相关文章

最新更新