前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@ModelAttribute 注解(8)

@ModelAttribute 注解(8)

作者头像
桑鱼
发布2020-03-17 18:30:12
7080
发布2020-03-17 18:30:12
举报

@ModelAttribute 注释方法

代码语言:javascript
复制
@Controller
@RequestMapping("/springmvc")
public class TestController {
    /**
     * 运行流程:@ModelAttribute注释的方法会在此controller每个方法执行前被执行
     * 1. 执行 @ModelAttribute 修饰的方法:模拟数据库取出行为,将user对象存储到map中,键为 user
     * 2. 然后在渲染页面时,模拟回显数据,将model中的数据取出并显示在页面,并把表单的请求参数赋给User对象的对应属性
     * 3. sprinngMVC 最后把上述对象传入目标方法的参数
     * 要注意的是:在存入map时,map的键值要和被@RequestMapping("/testModelAttribute")修饰的目标方法入参类型的第一个字符串的字符串一致
     * @param user
     * @return
     */
    @RequestMapping("/testModelAttribute")
    public String testModelAttribute01(User user){
        System.out.println("修改: " + user);
        return "success";
    }

    /**
     * @ModelAttribute 标记的方法,会在每个目标方法执行之前被SpringMVC调用
     * @param id
     * @param map
     */
    @ModelAttribute
    public void testModelAttribute(@RequestParam(value = "id",required = false)
                                                 Integer id,Map<String,Object> map){

        if(id != null){
            // 模拟从数据库中获取对象
            User user = new User(1,"Tom","123456","aa@aa.com",12);
            System.out.println("从数据库中获取一个对象:" + user);
            map.put("user",user);
        }
    }
}
代码语言:javascript
复制
public class User {

    private Integer id;
    private String username;
    private String password;

    private String email;
    private int age;
    private Address address;

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUsername() {
        return username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getPassword() {
        return password;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEmail() {
        return email;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public Address getAddress() {
        return address;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public Integer getId() {
        return id;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                ", age=" + age +
                '}';
    }

    public User(Integer id,String username, String password, String email, int age){
        super();
        this.username = username;
        this.password = password;
        this.email = email;
        this.age = age;
        this.id = id;
    }

    public User(){}
}
代码语言:javascript
复制
<!--
    模拟修改操作
    1. 原始数据:1,Tom,aa@aa.com,12
    2. 密码不能被修改
    3. 表单回显,模拟操作直接填写对应的属性值

-->
<form action="/springmvc/testModelAttribute" method="post">
    <input type="hidden" name="id" value="1">
    username:<input type="text" name="username" value="Tom">
    email:<input type="text" name="email" value="aa@aa.com">
    age:<input type="text" name="age" value="12">
    <input type="submit" name="Submit">
</form>

@ModelAttribute 注释参数

@ModelAttribute("user") User user注释方法参数,参数user的值来源于testModelAttribute03()方法中的model属性。

代码语言:javascript
复制
@ModelAttribute("user")
    public User testModelAttribute03(){
        return new User(1,"aa","123","aa@aa.com",12);
    }

    @RequestMapping("/testModelAttribute01")
    public String testModelAttribute04(@ModelAttribute("user") User user){
        user.setUsername("bb");
        return "success";
    }
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @ModelAttribute 注释方法
  • @ModelAttribute 注释参数
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com