springMVC模型数据

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liouyi250/article/details/79051491

Spring MVC提供了以下几种途径输出模型数据:

– ModelAndView:处理方法返回值类型为ModelAndView时,方法体即可通过该对象添加模型数据。
–Map及Model:入参为org.springframework.ui.Model、org.springframework.ui.ModelMap或java.uti.Map时,处理方法返回时,Map中的数据会自动添加到模型中。
–@SessionAttributes:将模型中的某个属性暂存到HttpSession中,以便多个请求之间可以共享这个属性到Httpsession中,以便多个请求之间共享这个属性。
–@ModelAttribute :方法入参标注该注解后,入参的对象就会放到数据模型中。

  1. ModelAndView:通过转发给目标视图,数据放在request域中
    @RequestMapping("/handle43")
    public ModelAndView handle43(){
        User user=new User("zhangsan","1222",23);
        ModelAndView mav=new ModelAndView();
        mav.setViewName("index");
        mav.addObject("user",user);
        return mav;
    }
  1. @ModelAttribute:入参的对象就会放到数据模型中,这个模型数据只能向页面传递,不能向请求传递。通过转发的请求无法获取这个数据,只能通过HttpServletRequest对象获取这个数据。如:
    /*这个方法如果返回一个页面,那么页面是可以获取到数据的*/
    @RequestMapping(value="/handle41",produces ="application/json;charset=utf-8")
    public String handle41(@ModelAttribute  User user){
        user.setAge(26);
        return "forward:/handle42";//如果使用redirect,则获取不到数据
    }

    //这个方法不正确
    @RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
    public @ResponseBody User handle42(ModelMap model){
     User user=(User)model.get("user");//这里user取不到,为null,
        return user;
}

//这个方法可以取到handle41传递过来的user
    @RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
    public @ResponseBody User handle42(HttpServletRequest request){
        User user=(User)request.getAttribute("user");//这里可以取到user
        System.out.println(user);
        return user;
    }

//或者也可以这个写,但是要注意@RequestBody的使用条件,不然可能会报415,406等错误
    @RequestMapping(value="/handle42",produces = "application/json;charset=utf-8")
    public @ResponseBody User handle42(@RequestBody User user){
        return user;
    }


  1. Map 及 Model使用

SpringMVC在调用方法前会创建一个隐含的模型对象作为模型数据的存储容器。
如果方法的入参为Map或Model类型。SpringMVC会将隐含类型的引用传递给这些入参,在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以像模型中添加新的属性数据。

  @RequestMapping("/handle44")
    public String handle43(){
        ModelMap mm=new ModelMap();
        mm.addAttribute("user",new User("zhangsan","lisi",23));
        return "index";
    }


  1. @SessionAttributes
    在控制器类上标注一个@SessionAttributes,SpringMVC将在模型中对应的属性暂存到HttpSession中。
    @SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中

–@SessionAttributes(types=User.class)会将隐含模型中所有类型为User.class的属性添加到会话中。
–@SessionAttributes(value={“user1”,”user2”})
–@SessionAttributes(type={User.class,Dept.class})
–@SessionAttributes(value={“user1”,”user2”},types{String.class})
@SessionAttributes(value={"user2"},types="String.class")
@Controller
public class SpringMVCTest{
    @RequestMappping("/test/sessionAttribute")
    public String testSessionAttribute(Map<String ,Object> map){
        User user = new User("tom","123","[email protected]",12);
        map.put("user",user);
        map.put("name","tom");
        return "success";
    }
}

这里将会把Map集合中的数据保存到Request和Session域对象中,获取Session模型数据

文章部分来源:https://my.oschina.net/u/2321816/blog/546964 (侵删)

猜你喜欢

转载自blog.csdn.net/liouyi250/article/details/79051491