本文共 2968 字,大约阅读时间需要 9 分钟。
数据处理与页面展示
在Spring MVC应用中,数据如何从控制器传递到页面是一个常见的问题。本文将介绍几种常用的方法,并结合实际场景进行说明。
ModelAndView类在Spring MVC中是一个非常有用的工具类。通过创建ModelAndView对象,我们可以将数据和视图分开管理。以下是一个示例:
@RequestMapping("toPerson5.do")public ModelAndView toPerson5() throws Exception { Person person = new Person(); person.setName("zhangsan"); person.setAge(23); person.setAddress("beijing"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("1982-09-09"); person.setBirthday(date); Map map = new HashMap (); map.put("p", person); return new ModelAndView("info", map);} 这种方法通过将数据封装到Map对象中,统一由视图解析器处理。虽然功能上可以实现数据的传递,但不建议在实际项目中使用,原因在于它不符合Spring MVC的最佳实践。
直接在方法参数中定义Map对象,可以让视图解析器统一处理数据。这种方法虽然简洁,但同样不建议使用,因为它不利于数据的复杂处理和扩展性。
@RequestMapping("toPerson6.do")public ModelAndView toPerson6(Map map) throws Exception { Person person = new Person(); person.setName("zhangsan"); person.setAge(23); person.setAddress("beijing"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date = sdf.parse("1982-09-09"); person.setBirthday(date); map.put("p", person); return new ModelAndView("info", map);} 推荐的做法是通过Model对象向页面传递数据。这种方法不仅简洁,而且符合Spring MVC的最佳实践。以下是一个示例:
@RequestMapping("toPerson7.do")public String toPerson7(Model model) throws Exception { Person person = new Person(); person.setName("lisi"); person.setAddress("shanghai"); person.setAge(32); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date birthday = sdf.parse("1782-12-12"); person.setBirthday(birthday); model.addAttribute("p", person); return "info";} 通过这种方式,数据会自动传递到页面,页面可以直接使用${p}来访问对象的属性。
Ajax调用
在Spring MVC中,处理Ajax请求需要注意返回值类型和数据传递方式。以下是几种常用的方法。
这种方法虽然可行,但不建议在实际项目中使用,因为它不符合现代开发规范。以下是一个示例:
@RequestMapping("ajax.do")public void ajax(@RequestBody String name, HttpServletResponse response) throws Exception { String result = "hello " + name; response.getWriter().write(result);} 推荐的做法是通过PrintWriter对象向页面输出数据。这种方法既简洁又高效。以下是一个示例:
@RequestMapping("ajax1.do")public void ajax1(@RequestBody String name, PrintWriter out) throws Exception { String result = "hello " + name; out.write(result);} 页面交互
为了实现页面之间的交互,可以使用重定向和视图名管理。以下是具体示例。
通过redirect:指定重定向的视图名,可以实现同一控制器内的页面跳转。以下是一个示例:
@RequestMapping("redirectToForm.do")public String redirectToForm() { return "redirect:toForm.do";} 当需要跨控制器重定向时,需要指定完整的命名空间。以下是一个示例:
@RequestMapping("redirectToForm1.do")public String redirectToForm1() { return "redirect:/test1/toForm.do";} 请求方法指定
为了实现对请求方式的精确控制,可以使用method属性。以下是一个示例:
@RequestMapping(value = "toPerson8.do", method = RequestMethod.POST)public String toPerson8(@RequestBody Person person) { System.out.println(person); return "jsp1/hello";} 通过指定RequestMethod.POST,可以确保前台页面只能以POST方式提交数据。
转载地址:http://novfk.baihongyu.com/