前面几篇文章重点说明了一下怎么从前台传递参数到目标方法,还没有说怎么把结果返回给前台。本篇来讲述一下spring mvc怎么返回结果数据。

从使用形式上看,有以下几种方式:ModelAndView、Map、Model,这几种方式都可以返回数据到前台,本质上来看都是通过map的形式返回数据的。本系列文章着重于使用,深层次的原因,感兴趣的同志可以去调适源代码,这里只是结合使用方式,做简单的样例和分析。


1、ModelAndView的使用

/***方法的返回值可以是ModelAndView类型,它可以包含视图和模型信息*springmvc会把模型信息放入到request域对象中,可以跟踪源码调试*这个类org.springframework.web.servlet.view.AbstractView*这个方法exposeModelAsRequestAttributes*@return*/@RequestMapping("/testModelAndView")publicModelAndViewtestModelAndView(){ModelAndViewmodelAndView=newModelAndView("success");modelAndView.addObject("name","JackuseModelAndView");returnmodelAndView;}

2、Map的使用

/***使用map返回数据,实际上是实例化了一个*org.springframework.validation.support.BindingAwareModelMap*@parammap*@return*/@RequestMapping("/testMap")publicStringtestMap(Map<String,Object>map){System.out.println(map.getClass().getName());map.put("name","JackuseMap");return"success";}


3、Model的使用,本质上与map一样

/***使用model和使用map一样,都是实例化了一个*org.springframework.validation.support.BindingAwareModelMap*@parammodel*@return*/@RequestMapping("/testModel")publicStringtestModel(Modelmodel){System.out.println(model.getClass().getName());model.addAttribute("name","JackuseModel");return"success";}

4、SessionAttributes的使用,可以把数据存放到session域中去,有两个属性,value和types,value执行需要放到会话中的属性的属性名,types指定需要放到会话中的属性的类型。


在类上添加注解:

@SessionAttributes(value={"user"},types={String.class})


目标方法的定义

/***注解SessionAttribute可以通过属性名指定需要放到会话中的属性,实际上通过value属性*还可以通过types指定哪些类型的属性需要放到会话中去*但是该注解只能用于类上*@parammap*@return*/@RequestMapping("/testSessionAttributes")publicStringtestSessionAttributes(Map<String,Object>map){Useruser=newUser();user.setAge(15);user.setUserName("lxy");map.put("user",user);map.put("name","jackinsessionAttribute");return"success";}


项目源代码:

https://git.oschina.net/acesdream/spring-mvc