SpringMVC ModelAttribtue注解

本文详细介绍了Spring MVC中ModelAttribute注解的使用方法,包括其在方法和参数上的不同应用方式及其效果,有助于理解如何通过该注解操作Model。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天研究了比较久,网上的资料说的不是很清楚,来这里整理一下。

不一定准确,但是八九不离十吧。


ModelAttribute是一个在控制器里使用的注解,用来从Model里存取数据。它可以注解在方法或者方法参数上。注解在方法上意味着往Model里存数据,注解在参数上意味着从Model取数据。


有几种用法,参考自 http://blog.youkuaiyun.com/li_xiao_ming/article/details/8349115


一.在方法上注解

这种情况下,方法会在每个控制器方法调用之前被调用。

1.@ModelAttribute注释void返回值的方法 

public class HelloWorldController {  
  
        @ModelAttribute  
        public void populateModel(@RequestParam String abc, Model model) {  
           model.addAttribute("attributeName", abc);  
        }  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld() {  
           return "helloWorld";  
        }  
}
这种情况下,populateModel先被执行,在model中置入请求参(/helloWorld?abc=text),之后执行helloworld,返回视图和准备好的model。

2.@ModelAttribute注释返回具体类的方法 

@ModelAttribute  
public Account addAccount(@RequestParam String number) {  
       return accountManager.findAccount(number);
}  

这种情况下,返回的对象会被置入Model,再传入控制器。该对象在Model中的名称由返回值类型决定,该例中名字是account。如果有多个同类型的对象会怎么样?我不知道。

3.@ModelAttribute(value="")注释返回具体类的方法 

@Controller  
public class HelloWorldController {  
        @ModelAttribute("attributeName")  
        public String addAccount(@RequestParam String abc) {  
           return abc;  
        }  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld() {  
           return "helloWorld";  
        }  
}
这种情况和上一种类似,只是对象在Model中的名称由ModelAttribute的value参数决定


二.@ModelAttribute注释方法参数

这种情况下,参数回从Model中取出数据

1.从Model中获取

@Controller  
public class HelloWorldController {  
        @ModelAttribute("user")  
        public User addAccount() {  
           return new User("jz","123");  
        }  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld(@ModelAttribute("user") User user) {  
           user.setUserName("jizhou");  
           return "helloWorld";  
        }  
}
user参数将从Model中取出名字是“user”的对象

2.从请求中获取

@Controller  
public class HelloWorldController {  
  
        @RequestMapping(value = "/helloWorld")  
        public String helloWorld(@ModelAttribute User user) {  
           return "helloWorld";  
        }  
}
user回从请求中绑定数据。其实写不写标注都可以完成绑定。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值