在网上搜了一下,之前的人有修改实体类的,在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 >
< 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;
}
}
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;
}
}