@ModelAttribute修饰的控制器方法表示在执行控制器处理方法之前执行该方法
并且该方法的返回值回作为value传给Model,那么其key是什么呢?两种情况:
- @ModelAttribute指定了value或者name属性:key为其指定值
- @ModelAttribute没有指定value或者name属性:key为其返回值的类型首字母小写,比如string
直接上栗子:
用户请求url:
/my?name=lyx&age=22
控制器:
@Controller
public class UserController
{
@ModelAttribute
public void m1(String name,Model model)
{
model.addAttribute("name",name);
}
@ModelAttribute
public String m2(Integer age,Model model)
{
model.addAttribute("age",age);
return "我是string的值!";
}
@RequestMapping("/my")
@ModelAttribute("控制器处理方法返回")
public Integer login()
{
return 888;
}
}
我们看到@ModelAttribute居然把控制器处理方法都修饰了,那么返回值该如何理解?
当控制器处理方法被@ModelAttribute修饰时,那么该返回值不再作为逻辑是图名,而是作为value传给Model,那么没有逻辑视图名返回的情况下就轮到RequestToViewTranslator登场了,其解析时逻辑视图名就是用户请求的url,假如用户请求的是/xyz那么逻辑视图名就是xyz,在上面的示例中逻辑视图名就是my
my.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
name:${name}<br/>
age:${age}<br/>
string:${string}<br/>
控制器处理方法返回:${控制器处理方法返回}<br/>
</body>
</html>
结果:
name:lyx
age:22
string:我是string的值!
控制器处理方法返回:888