二、全选批量提交及删除确认
1. 全选和批量提交。首先,在javabean里增加一个checked的成员变量(private boolean checked;)表示是否被选中。
然后,在浏览页面上,字段标题前增加一个复选框,在记录每一行前面增加一个复选款,这样就可以使用javascript实现“全选/取消”的功能。
- 在字段标题上增加“全选”复选框(点击全选中或取消选中)
<h:column>
<f:facet name="header">
<h:panelGroup>
<h:outputText value="全选"></h:outputText>
<h:selectBooleanCheckbox id="selectall" onclick="SetCheckedStatus()"></h:selectBooleanCheckbox>
</h:panelGroup>
</f:facet>
<h:selectBooleanCheckbox value="#{obj.checked}"></h:selectBooleanCheckbox>
</h:column>
注意:复选款与checked属性对应起来,若checked=true时则复选框为显示选中状态,同时页面提交时会将客户端的复选框值传给该bean的checked属性。
- javascript代码(IE6上测试通过,其它浏览器可能需要酌情修改)
function SetCheckedStatus()
{
// 注意此处的id要与h:form, h:dataTable, h:selectBooleanCheckbox中的id保持一致!
var oTable=document.all['fors:data'];
var oChkAll=document.all['fors:data:selectall']
if(oTable != null && oChkAll != null) {
for(j=1;j<oTable.rows.length;j++) {
oTable.rows(j).cells(0).children.item(0).checked=oChkAll.checked;
}
}
}
- 在java代码获取哪些记录已经被选中
// 获取前台复选框的取值,遍历处理
List list = (List) dataModel.getWrappedData();
for (int i = 0; i < list.size(); i++) {
DoubtCustBean obj = (DoubtCustBean) list.get(i);
if (obj.checked) {
// ... 该行记录被选中,进行处理
}
}
对于批量操作,可以使用Hibernate中的批量提交进行性能上的优化。
2. 删除提示
出于数据安全性考虑,当用户点击删除时,应予以提示确认,添加一小段javascript代码即可。下面给出一个示例:
<h:commandLink action="#{doubtCustBean.deleteAction}"
onclick="if(!confirm('确认要删除该条记录吗?')) return false;">
<h:outputText value="删除"></h:outputText>
<f:param name="ctserial" value="#{obj.ctserial}"></f:param>
</h:commandLink>