Action中:
- Java code
/** * *异步方法* * 此方法用于异步加载所有功能列表 * @return * @throws SQLException */ @RequestMapping(value="/fulist") @ResponseBody public String OperatorFuList(HttpSession session) throws SQLException{ //获取操作人 OperDto operDto = (OperDto) session.getAttribute("operDto"); if(null == operDto){ return "ACTION_ERROR"; } JSONArray object =null; try { //获取所有功能列表 List<FunResource> funList = operatorManService.getAllFuncs(operDto); object = JSONArray.fromObject(funList); } catch (RuntimeException e) { e.printStackTrace(); return ACTION_ERROR; } return object.toString(); }/** * *异步方法* * 根据角色ID查询所拥有的功能列表 * @return * @throws SQLException */ @RequestMapping(value="/rolefunlist") @ResponseBody public String OperatorRoleFunList(HttpSession session) throws SQLException{ //获取操作人 OperDto operDto = (OperDto) session.getAttribute("operDto"); if(null == operDto){ return "ACTION_ERROR"; } JSONArray object =null; try { //根据角色ID查询所拥有的功能列表 List<FunResource> funList = operatorManService.getFuncsByRoleid("0000000005"); object = JSONArray.fromObject(funList); } catch (RuntimeException e) { e.printStackTrace(); return ACTION_ERROR; } return object.toString(); }
JSP页面:
- JScript code
function loadFuncs(){ $('#fun_div')(""); $.getJSON("${AP_ROOT}/operator/fulist", function(data){ $.each(data, function(i,item){ $.getJSON("${AP_ROOT}/operator/rolefunlist", function(data1){ $.each(data1, function(j,item1){ if(item1.funcid==item.funcid){ $('#fun_div').append("<div class='mi_div'><input name='funcid' type='checkbox' class='fun_check' value='"+item.funcid+"' checked='true'/><label class='fun_lable'>"+item.funcname+"</label></div>") }else{ $('#fun_div').append("<div class='mi_div'><input name='funcid' type='checkbox' class='fun_check' value='"+item.funcid+"'/><label class='fun_lable'>"+item.funcname+"</label></div>") } if((i+1)%4==0){ $('#fun_div').append("<br/>") } }); }); }); });}
Action中查询到两个List,转换成JSON格式,供JS中异步加载.
先说说两个List的关系:
两个List中存放的都是FunResource对象
第一个List中存放的是所有的FunResource对象
第二个List中只存放了一部分FunResource对象
PS:第二个List中的FunResource对象都能在第一个List中找到!
现在我需要做的是遍历第一个List,在页面上生成很多个checkbox,(也就是说List中的一个对象就是页面上的一个checkbox)
然后通过判断第二个List中的FunResource对象是否跟第一个List中的相同
如果相同则让对应的checkbox默认为选中状态!
这个逻辑改怎么写,我真是绕糊涂了,所以来求大家帮忙想想 - -
------解决方案--------------------------------------------------------
我感觉你这样写有点复杂,你应该把下面的逻辑最好放在action中完成。
"
现在我需要做的是遍历第一个List,在页面上生成很多个checkbox,(也就是说List中的一个对象就是页面上的一个checkbox)
然后通过判断第二个List中的FunResource对象是否跟第一个List中的相同
如果相同则让对应的checkbox默认为选中状态!
"
你要是就这样重复的异步请求应该有多慢啊。
你最好直接返回的类型是 List<Map<FunResource,Boolean>>;用前边的表示资源,后边的表示checked.