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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/oppoppoppo/article/details/53444373

一.两种方式可以返回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'}
		];


展开阅读全文

没有更多推荐了,返回首页