【发布时间】:2013-09-27 16:01:20
【问题描述】:
我正在关注此链接http://balusc.blogspot.com/2006/06/using-datatables.html 以选择多个复选框并检索 bean 中的值:
我的jsf代码如下:
<p:dataTable value="#{deviceController.devicesModel}"
var="item" widgetVar="deviceTable"
selection="#{deviceController.selectedDevices}"
rowKey='#{item}'>
<p:column sortBy="#{item.manufacturerSerialNum}" filterBy="#{item.manufacturerSerialNum}">
<f:facet name="header">
<h:outputText value="Manufacturer Serial No"/>
</f:facet>
<h:outputText value="#{item.manufacturerSerialNum}" />
</p:column>
<p:column selectionMode="multiple">
<f:facet name="header">
<h:outputText value="#{bundle.ListLaptopTitle_inService}"/>
</f:facet>
<h:selectBooleanCheckbox value="#{item.isInService}"/>
</p:column>
</p:dataTable>
<p:commandButton action="#{deviceController.getSelectedItems}"
value="Submit Request" style="margin-top: 20px"/>
我的 bean 代码是:
public String getSelectedItems(){
selectedDevicesList = new ArrayList<Device>();
List<Device> dev=createDeviceList();
for (Device item :dev ) {
if (item.getIsInService()) {
selectedDevicesList.add(item);
item.setIsInService(false); // Reset.
}
}
return "selected";
}
我不明白的是我们在哪里传递表格中选定行的值。最初,如果我有 4 行并且现在当我检查两行时所有复选框都未选中,那么它应该转到 bean 并且这两个值应该在数据库中更新。就像我应该在我的 bean 中获得这两个 bean 的 inservice 字段的值一样。你能告诉我我缺少什么吗。谢谢。
【问题讨论】:
-
看起来您走在正确的道路上。当您单击复选框时,
item.isInService将被切换。当您单击命令按钮时,您正在构建一个selectedDevicesList,您可以使用它来更新您的数据库。您应该使用selectedDevicesList来创建和执行您的数据库更新语句。 -
我还没有完全阅读您的问题/问题,但是您在那里链接的文章针对的是 JSF 1.x 数据表。在 PrimeFaces 中,您无需自己将
<h:selectBooleanCheckbox>放入<p:column selectionMode>。
标签: jsf primefaces datatable