在网上搜了一下,之前的人有修改实体类的,在EntityBean中加上isSelected属性.但我觉得实体类加上这一条属性只为了实现多行选中实在不妥.
后来我用了在BackingBean中加Map属性的方法来实现. 看代码:
JSF:
<h:form>
<h:dataTable value="#{myBean.dataList}" var="item">
<h:column>
<f:facet name="header">
<h:outputText value="Select" />
</f:facet>
<h:selectBooleanCheckbox value="#{myBean.selectedIds[item.id]}" />
</h:column>
...
</h:dataTable>
<h:commandButton value="Get selected items" action="#{myBean.getSelectedItems}" />
</h:form>BackingBean:
public class MyBean {
private Map selectedIds = new HashMap();
private List selectedDataList;
public String getSelectedItems() {
selectedDataList = new ArrayList();
for (MyData dataItem : dataList) {
//如果使用了分页的话这个判断不可少.
if(selectIds.get(dataItem.getId())==null){
continue;
}
if (selectedIds.get(dataItem.getId()).booleanValue()) {
selectedDataList.add(dataItem);
selectedIds.remove(dataItem.getId()); // 删掉已取的项.
}
}
// 这里加需要处理的代码, 比如批量删除或修改.
return "selected";
}
public Map getSelectedIds() {
return selectedIds;
}
public List getSelectedDataList() {
return selectedDataList;
}
}
本文介绍了一种在JSF应用中实现多行选中的方法,通过在BackingBean中使用Map来跟踪选中的项,避免了对实体类的直接修改。

547

被折叠的 条评论
为什么被折叠?



