Spring框架学习(5.3)SpringMVC常用注解-返回值类型与保存模型数据

前言

记录学习过程,上接上一节,绑定控制器类处理方法入参

控制器类处理方法的返回值类型

SpringMVC返回类型不仅仅有字符串,还可以是ModelAndView、MOdel、Map等等
如果返回类型是ModelAndView,其中可包含视图和模型信息,SpringMVC会将模型信息存放在request域中

例:
(1)在HelloController中添加方法returnModelAndView

@RequestMapping("/returnModelAndView")
    public ModelAndView returnModelAndView(){
        String viewName="success";//ModelAndView属性名
        ModelAndView modelAndView=new ModelAndView(viewName);
        Users users=new Users("zhangsan","123456",new Address("jiangxi","nanchang"));
        modelAndView.addObject("users",users);//将users对象添加到ModelAndView
        return modelAndView;
    }

(2)index.jsp界面添加超链接

<a href="/springmvc/returnModelAndView">ModelAndView</a><br>

(3)success.jsp界面添加用于访问ModelAndView对象中保存的Users对象的requestScope对象,

<body>
    欢迎光临
    <br>
    ModelAndView:${requestScope.users}
</body>

(4)测试成功
在这里插入图片描述

注意

这里可能会出现一个bug,spring找不到ModelAndView
在这里插入图片描述
这是ModelAndView包导错了。。。
默认的org.springframework.web.portlet.ModelAndView这个包是错的
应该是org.springframework.web.servlet.ModelAndView这个包

保存模型属性到HttpSession

通过在控制器类上标注@SessionAttribute注解,可将模型数据保存在HttpSession中,以便多个请求之间共用该模型数据
例:
(1)在HelloController类添加方法sessionAttribute,在控制器类HelloController上标注@SessionAttributes(value = “user”)

    @RequestMapping("/sessionAttribute")
    public String SessionAttribute(ModelMap modelMap){
        Users users=new Users("zhangsan","123456",new Address("jiangxi","nanchang"));
        modelMap.put("users",users);
        return "success";
    }

(2)index.jsp上添加超链接


  <a href="/springmvc/sessionAttribute">SessionAttribute</a>

在success.jsp上添加用于访问保存在httpSession中的user对象

 SessionAttribute:${sessionScope.user}

(3)测试成功
在这里插入图片描述

在控制器类方法之前执行的方法

想让一个方法在控制器类的所有处理方法之前执行,可以通过在该方法上标注@ModelAttribute注解实现
例:
(1)在HelloController中添加方法getUsers、modelAttribute

    @ModelAttribute
    public Users getUsers(Model model){
        Users users=new Users("lisi","111111",new Address("jiangxi","shangrao"));
        model.addAttribute("user",users);
        return users;
    }
    @RequestMapping("/modelAttribute")
    public String modelAttribute(Users users){
        System.out.println(users);
        return "success";
    }

(2)在index.jsp中添加超链接

  <a href="/springmvc/modelAttribute">ModelAttribute</a>

(3)测试成功
点击ModelAttribute链接时,请求被HelloController类的modelAttribute方法处理,在执行该方法之前,先调用了getUsers方法,实例化对象users并存入model,getUsers方法返回了该对象,被传递给modelAttribute方法的参数users
在这里插入图片描述
对象users被存入Model,访问request作用域可以得到对象users,对象users没有保存在httpSession中,访问session作用域无法获取对象(在HelloController上已经将上面的@SessionAttributes(value = “users”)注释)
在这里插入图片描述
那如果没有注释@SessionAttributes(value = “users”),发现
在这里插入图片描述
在@SessionAttributes和@ModelAttribute一起用时,对象可以通过@ModelAttribute(“”)绑定到Session,所以session作用域也可以获取到users对象
明白这些需要更深层的了解@SessionAttributes和@ModelAttribute
大佬的解释

发布了49 篇原创文章 · 获赞 0 · 访问量 1258

猜你喜欢

转载自blog.csdn.net/key_768/article/details/103964897