分页 checkbox选中问题


分页的时候,checkbox选中问题

很多人都遇到类似的问题,比如第一页选中一个,第二页选中一个,然后把两页选中的两个都挑选出来,而且从第二页返回第一页的时候,第一页选中的那个数据还是选中状态

1.Action所做的处理

Map<Integer,String[]> map = (Map)request.getSession().getAttribute("map");
if(collectFile!=null && collectFile.length>0){
if(map==null){
//第一次进入列表页面
map = new HashMap<Integer,String[]>();
map.put(currentPage, collectFile);
}else{
if(!map.containsKey(currentPage)){
map.put(currentPage, collectFile);
}else{
map.remove(currentPage);
map.put(currentPage, collectFile);
}
}
request.getSession().setAttribute("map", map);
}
if(map!=null){
List list = new ArrayList();
Iterator iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry<Integer, String[]> entry = (Entry<Integer, String[]>) iter.next();
String[] str = entry.getValue();
for (int i = 0; i < str.length; i++) {
list.add(this.trans(str[i]));
}
}
request.setAttribute("selectedFiles",list);
}

原理就是这样:1.把所有的数据放在一个map里,map(第几页,选中的数据);

       2.当跳到当前页面的时候,比如从第一页跳到第二页的时候,这时候就要保存第一页选中的数据,这时需要做的是先把以前第一页的那个map移除,然后添加新的map(第一页,选中的数据)

       3.遍历map,把map里的所有页的数据遍历出来,保存到一个list里(为什么这样做,是为了便于下面jsp里的动作);

2.jsp所做的处理,写一个function

function initPage(){
var inputs = document.getElementsByTagName("input");
<%
List<String> selectedFiles = (List)request.getAttribute("selectedFiles");
if(selectedFiles!=null){
for(int i=0;i<selectedFiles.size();i++){
%>
for(var j= 0;j<inputs.length;j++){
var input = inputs[j];
if(input.type=="checkbox"){
if(input.value=="<%=(String)selectedFiles.get(i)%>"){
input.checked = true;
}
}
}
<%}}%>
}

原理:jsp所做的就是遍历所有的checkbox,然后取到checkbox的value,然后遍历从Action传过来的list,将两者的值进行比较,如果相同,那么checkbox.checked=true;

        注意这个function应该是页面刚进入的时候进行的动作,所以body load的时候所调用的方法,或者setTimeout("initPage()",50);这样处理也行

 

详情查看总站项目Action:DataCollectAction      jsp:listFile.jsp


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM