我有一个数据表在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']}" ... >