思路:
1、在 form 中添加字段ids和checkstate字段,
private java.lang.String ids;
private java.lang.Boolean checkstate;
将选中的id集合放在ids中,以逗号分隔;checkstate字段记录该条条目是否被选中
前端设置隐藏ids字段 <html:hidden property="ids"/>,用于与后端进行数据传递
2、点击checkbox该条记录被选中,再次点击取消选中
<input type="checkbox" name="tasks" id="task<%=i%>" value="<%=planTask.getId()%>" οnclick="changeCheck('task<%=i%>');" >
js中changeCheck()方法如下:
function changeCheck(taski){
var checkbox=document.getElementById(taski);
var checkboxState=checkbox.checked;
var taskid=checkbox.value;
if(checkboxState==true){
document.getElementsByName("ids")[0].value+=taskid+","; //被选中后向ids字段中添加该条任务的id
// alert(document.getElementsByName("ids")[0].value);
}else{
document.getElementsByName("ids")[0].value=document.getElementsByName("ids")[0].value.replace((taskid+","),"");
// alert(document.getElementsByName("ids")[0].value); //取消选中后将该条任务的id从ids中删除
};
}
3、返回上一页后,之前已经被选中的记录显示为勾选状态
在后端获取该页的所有记录后,将这些记录与ids字段中所有被勾选记录的id集合相匹配,若某条记录在ids集合中,则设置该条记录的checkstate字段为true,在前端判断该字段,并根据该字段确定是否显示勾选状态
后端:
String ids=(String)request.getAttribute("ids");
String varryid[]=null;
if(!Util.strNull(ids).equals("")){varryid=ids.split(",");} //被勾选的id放在varryid[数组中
List<PlanTask> resultRows = PlanTaskManager.getTasksByConditonByPage(planTaskForm.getScore(),planTaskForm.getAttr1(),page.getCurrentStartOfPage(), page.getPageSize()); //获取该页的所有记录
if(varryid!=null && varryid.length>0){
for(int i=0;i<resultRows.size();i++){
for(int j=0;j<varryid.length;j++){
if( resultRows.get(i).getId().equals(varryid[j])){
resultRows.get(i).setCheckstate(true); //若该条记录已被勾选,设置checkstate字段为true
}
}
}
}
前端:
<%if(Util.strNull(planTask.getCheckstate()).equals("true")){ %>
<input type="checkbox" name="tasks" id="task<%=i%>" value="<%=planTask.getId()%>" checked="checked" οnclick="changeCheck('task<%=i%>');" > 若checkstate字段为true,已被勾选,checked属性设为"checked"
<%}else{ %>
<input type="checkbox" name="tasks" id="task<%=i%>" value="<%=planTask.getId()%>" οnclick="changeCheck('task<%=i%>');" >
<%} %>