2016-12-03(两种处理JSON返回页面的方式、分页,ModelAndView和Model的区别,<C:forEach>注意)

    xiaoxiao2021-12-14  19

    一.两种方式可以返回JSON对象

    1.使用@ResponseBody进行直接返回,这种方式适合于如果页面是各种UI框架的数据表格,提示只要返回对应的JSON格式的数据,框架就可以帮你拼装的类型

    比如:

    @RequestMapping(value="getAllUser") public @ResponseBody String getAllUser(HttpServletResponse resp,@RequestParam(value="pager.pageNo") String pageNo){ List<UserDemo> list = userDemoService.findList(); int count = userDemoService.findCount(); Map<String, Object> map = Maps.newHashMap(); map.put("rows", list); map.put("pager.totalRows", count); map.put("pager.pageNo", pageNo); String s = JsonMapper.toJsonString(map); return s; }返回页面需要的JSON格式即可,可以通过UI框架的官网DEMO,看到请求和响应的参数(响应的JSON格式,分页的数据的KEY等等)

    2.直接放在request域中,然后通过request封装组件返回(Map,ModelMap.Model等),然后返回到javascript再进行封装,前提是UI框架提供了树、数据表格等页面元素的初始化参数

    比如:

    后台

    @RequestMapping(value="index") public String index(Model model){ List<TreeDemo> treeDemos = treeDemoService.getAllTreeNote(); model.addAttribute("treeDemos", treeDemos); logger.warn("...................................index"); return "modules/treeDemo/treeIndex"; } 前台UI提供了参数的放置地点

    var zNodes1 =[ <c:forEach items="${treeDemos}" var="td" varStatus="tdSta"> <c:if test="${tdSta.count != 1}"> , </c:if> {id:'${td.id}',parentId:'${td.parentId }',open:true,name:'${td.name}',url:urlbath + '${td.url}',target:'${td.target}',title:'${td.title}'} </c:forEach> //{id:'1111', parentId:'11111',open:true, name:"商业部",url:'AAA',target:'AAA',title:'AAA'} ]; function initComplete(){ var layout=$("#layout1").layout({ leftWidth: 500}); var ztree = $.fn.zTree.init($("#myTree"), setting1, zNodes1);} 注意 initComplete是qui的一种初始化方法,这里我们需要网zNode1这个参数中传递需要的json字符串

    可以在js中初始化这个List<Map>形式的JSON,将后台返回的treeDemo直接传递c:forEach中遍历即可

    二:ModelAndView和Model的区别

    如果使用ModelAndView就要返回ModelAndView,而不能去返回String的URL地址,那么会造成AddObject中的参数丢失

    比如:

    @RequestMapping(value="index") public String index(Model model){ List<TreeDemo> treeDemos = treeDemoService.getAllTreeNote(); //model.addAttribute("treeDemos", treeDemos); ModelAndView andView = new ModelAndView(); andView.addObject("treeDemos",treeDemos); logger.warn("...................................index"); return "modules/treeDemo/treeIndex"; } 这样就会造成参数丢失

    应使用

    @RequestMapping(value="index") public String index(Model model){ List<TreeDemo> treeDemos = treeDemoService.getAllTreeNote(); model.addAttribute("treeDemos", treeDemos); logger.warn("...................................index"); return "modules/treeDemo/treeIndex"; } 三:c:forEach注意事项

    <C:ForEach>的实现逻辑是将参数取出然后再次放入Request域中以var varStatus表示,仅仅在循环体中这个参数才能有效果

    因此,在使用varStatus需要注意也要加上${}去取,容易忘记

    var zNodes1 =[ <c:forEach items="${treeDemos}" var="td" varStatus="tdSta"> <c:if test="${tdSta.count != 1}"> , </c:if> {id:'${td.id}',parentId:'${td.parentId }',open:true,name:'${td.name}',url:urlbath + '${td.url}',target:'${td.target}',title:'${td.title}'} </c:forEach> //{id:'1111', parentId:'11111',open:true, name:"商业部",url:'AAA',target:'AAA',title:'AAA'} ];

    转载请注明原文地址: https://ju.6miu.com/read-969132.html

    最新回复(0)