Spring 常用注解-@ModelAttribute视图数据渲染
@ModelAttribute也是Spring MVC中非常重要的注解之一,它主要绑定方法的参数或者方法的返回值为一个 命名属性 ,并且暴露给view使用。
下面我们就看两个小例子,它如何绑定方法参数与返回值给视图
案例
搭建环境
参考Spring MVC入门案例,https://www.jianshu.com/p/2104239df637,搭建好运行环境。
- 准备一个模型对象
 
public class User {
    private String id;
    private String name;
    private Integer age;
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
2 . 准备jsp页面,放在WEB-INF目录下的views目录,记得配置viewresolever
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
     </bean>
jsp页面
<%--
  Created by IntelliJ IDEA.
  User: aihe
  Date: 2018/11/15
  Time: 上午7:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2> msg:${msg}</h2>
<p>ID: ${user.id}</p>
<p>name: ${user.name}</p>
<p>age: ${user.age}</p>
</body>
</html>
3 .看下项目目录结构, 这次我们只用到ModelController,其它的控制器都没有用到。

作为方法参数
- 写好控制器,将@ModelAttribute标注在user入参的地方。
 
@Controller
@RequestMapping("/model")
public class ModelController {
    @RequestMapping("/parameter")
    public String parameter(
            @ModelAttribute("user") User user
    ) {
        return "index";
    }
}
- 测试访问,可以看到入参成功的被注入到了视图上面
 

作用在方法上
- 将控制器对象更改为如下
 
@Controller
@RequestMapping("/model")
public class ModelController {
    @ModelAttribute
    public User initUser(){
        User user = new User();
        user.setName("default");
        return user;
    }
    @RequestMapping("/parameter")
    public String parameter(
            @ModelAttribute("user") User user
    ) {
        return "index";
    }
}
2 . 再次进行测试,虽然我们没有传入name参数,但是还要有name的值存在。
Note: 因为Spring在处理请求的时候,发现控制器内有方法上标注@ModelAttribute的方法,会优先执行这个方法。然后如果方法有返回值,会将方法的返回值添加到模型中。

最后
这次一起看了@ModelAttribute注解。学习了它的用法。
		
随时随地看视频