注释在方法上
是存数据
不能和@ExceptionHandler一起使用,因为异常随时出现,会造成Model数据的不稳定。
在同一方法上不与@RequestMapping一起用
注意事项:
被@ModelAttribute注解的方法会在controller每个方法执行前被执行。
注释void方法
//请求hellowWorld之前,会执行setUserName()
@Controller
public class testController {
@ModelAttribute
public void setUserName(
@RequestParam String userName, Model model) {
model.addAttribute("userName", userName);
}
@RequestMapping(value = "/helloWorld")
public String helloWorld() {
return "helloWorld";
}
}
注释返回具体类的方法
//当model属性的名称没有指定时,它由返回类型隐含表示。
//这个方法返回User类型,那么这个model属性的名称是user。
@Controller
Public class testController
{
//情况1
@ModelAttribute
public User getUser()
{
return userService.getUser();
}
//情况2(推荐),设定User实体绑定到currentUser
@ModelAttribute(value = "currentUser")
public User getUser()
{
return userService.getUser();
}
}
在同一方法上与@RequestMapping一起用
注意: 这个是在请求getUser的时候,把返回值和currentUser组装成Model对象
@Controller
Public class testController
{
//情况1
@RequestMapping(value="/getUser")
@ModelAttribute(value="currentUser")
public User getUser()
{
return userService.getUser();
}
}
注释方法的参数
是取数据
从model
//从request(Model)中取已经存在的对象{currentUser: User}
@RequestMapping(value="/getUser")
public User getUser(@ModelAttribute("currentUser") User user)
{
user.getName();
user.getAddress();
}
Url或表单中获取组装
//假设请求url为: localhost:8080/项目名/getUser?name=lucy&address=beijing
//这样ModelAttribute就会组装起参数来,其实可以不用写@MdelAttrubte,即使不写springmvc也会自动调用它组装
@RequestMapping(value="/getUser")
public User getUser(@ModelAttribute User user)
{
return userService.getUser();
}