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注解。学习了它的用法。