首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Display Tag标签下使用checkbox勾选且分页后复选框状态封存

2013-11-16 
Display Tag标签下使用checkbox勾选且分页后复选框状态保存//初始化Table所选项private void initCheckedI

Display Tag标签下使用checkbox勾选且分页后复选框状态保存
//初始化Table所选项private void initCheckedItems(HttpServletRequest request,HttpServletResponse response, Model model){boolean isFirstEnter=true;if(request.getQueryString()!=null && !"".equals(request.getQueryString())){ if(request.getQueryString().contains("-p")){ isFirstEnter=false; }}if(isFirstEnter){//判断是否第一次进入该页面[在未点击分页情况下]//创建map,用于存放选中的checkboxMap ck_map = new HashMap();//存放session,命名为jld_session,注意:每个模块定义用于存放checkbox的session的名字必须不同request.getSession().setAttribute("chkd_session", ck_map);}if(request.getSession().getAttribute("chkd_session")!=null){//获取名字为当前模块的session,把session中的值取出来,返回到页面,用于判断哪个checkbox选中了 Map map = (Map)request.getSession().getAttribute("chkd_session"); String ckIds = ""; if(map !=null){ Iterator it = map.entrySet().iterator(); while(it.hasNext()){ Map.Entry entry = (Map.Entry) it.next(); String value = (String)entry.getValue(); if(ckIds.equals("")){ ckIds = value; }else{ ckIds = ckIds +";"+value; } } } model.addAttribute("ckIds", ckIds);}}

?

在list所在的action中加入initCheckedItems(request, response, model);方法。

?

2、全选和单选操作,每次点击checkbox的时候,都触发一个js函数,把id传到后台,后台根据前台判断的是选中还是选中之后取消来做相应的 操作,是添加到map中,还是从map中移除,该方法里创建个map,把ID作为键值,ID作为value值,然后循环这个map,把所有ID组成字符串 用“;”分割,ajax返回值就是这个字符串,然后document.getElementById().value=...把这个字符串设在隐藏域 中??? 代码如下:

?

//全选时触发function checkAll(){if ($("#chkAll:checked").length > 0){$("[name=sonChecklist]").attr("checked", "checked");$("[name=sonChecklist]").each(function(){var id=$(this).attr("id");chkSonClick(id);}); }else{$("[name=sonChecklist]").removeAttr("checked");}}//单选时触发function chkSonClick(id){    var check = document.getElementById(id);    var a = 1;    if(check.checked){    a = 1;//添加    }else{    a = 0;//取消    }    var b = 0;    $.ajax({            async: false,            type: "POST",            url: "setSubIds.do",            data:"&id="+id+"&done="+a,            success: function(msg){                document.getElementById("ckIds").value = msg;//存到页面隐藏域中                b = 1;            }    });    if(a==1&&b==1){    document.getElementById(id).checked =true;    }else if(a==0&&b==1){    document.getElementById(id).checked =false;    }}

3、后台处理传过来的数据,每次处理好数据之后都把数据设在页面的隐藏域中。

@RequestMapping("/setSubIds")public String setSubIds(HttpServletRequest request,HttpServletResponse response, RedirectAttributes attribute)throws Exception {System.out.println("----Ajax保存所选的checkbox进入----");        String id = request.getParameter("id");        //点击checkbox的value值        String done = request.getParameter("done");    //判断操作,是选中,还是选中之后取消        //获得此模块所存的用于存储选中id的session,此模块命名为chkd_session,不同模块sessionid不同        Map map = (Map)request.getSession().getAttribute("chkd_session");        if(done.equals("1")){            map.put(id, id);//插入map操作,id作为主键,id作为值,用户覆盖相同的值        }else if(done.equals("0")){            map.remove(id);//从map中移除操作        }        System.out.println("Map里存的值:"+map.size());        //覆盖名为chkd_session的session        request.getSession().setAttribute("chkd_session", map);        //以下用于ajax返回值操作        try{        String ids = "";//要返回页面的字符串        if(map !=null){            //把map遍历成字符串            Iterator it = map.entrySet().iterator();                   while(it.hasNext()){                Map.Entry entry = (Map.Entry) it.next();                String value = (String)entry.getValue();                //循环第一遍                if(ids.equals("")){                    ids = value;                }else{                    ids = ids +";"+value;                }            }            }        //创建servlet        response.setContentType("text ml;charset=gb2312");        PrintWriter outs = response.getWriter();        response.setHeader("Pragma", "No-cache");        response.setHeader("Cache-Control", "no-cache");        response.setDateHeader("Expires", 0);        outs.print(ids);//打印返回值    } catch (IOException e) {        e.printStackTrace();    }return null;}


4、在提交的时候获取这个隐藏域的内容,每次翻页都会发这些ID藏在隐藏域中
??????判断是否选中:在页面加载之后最后执行:

//初始化选中项initCheckedItems();function initCheckedItems(){var idd = document.getElementsByName("sonChecklist");//checkbox的name名称,自己定义var ids = document.getElementById("ckIds").value;//隐藏域里的所有选中的id,字符串var arr = ids.split(";");for(var i=0;i<idd.length;i++){       for(var n=0;n<arr.length;n++){       if(idd[i].value==arr[n]){idd[i].checked = true;//如果有匹配的就选中       }       }}}

?5、如何在display tag标签中嵌入checkbox可供选择。

?

<display:table id="item" name="${itemList}" size="${itemCount}" pagesize="${itemSize}"partialList="true"><display:column title="<input  id='chkAll' type='checkbox' name='chkAll'  onclick='checkAll()'/>" name='sonChecklist' value="${item.id}" onclick='chkSonClick(${item.id})'/>    </display:column><display:column title="名称" property="title" sortable="true"/></display:table>

?总结:实现了自己的需求。

??????????? ?缺点:可能会慢,如果网络不好,因为每次都有请求。

?

?

热点排行