SpringMVC注解之ModelAttribute

SpringMVC注解之ModelAttribute

作用

可修饰方法和参数。

修饰方法

优先执行。

有没有返回值都可修饰。

测试案例

controller

@RequestMapping("/testModelAttribute")
public String testModelAttribute(){
    System.out.println("ModelAttribute执行。。。。。。");
    System.out.println(" = "  );
    return "success";
}

@ModelAttribute
public void showUser(){
    System.out.println("showUser执行了。。。。。。");
}

jsp

<form action="anno/testModelAttribute" method="post">
    名字:<input type="text" name="uname"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交"><br>
</form>

测试结果

showUser执行了。。。。。。
ModelAttribute执行。。。。。。

应用场景

User类

public class User implements Serializable {
    private String uname;
    private Integer age;
    private Date date;
}

表单提交的数据只有uname , age两个属性。

date属性 为 null

user = User{uname='SAg', age=23, date=null}

则可以提前为date属性赋值为数据库中的原来的值。

方法一(有返回)
测试案例

controller

@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
    System.out.println("ModelAttribute执行。。。。。。");
    System.out.println("user = " + user.toString() );
    return "success";
}

@ModelAttribute
public User showUser(String uname){
    System.out.println("showUser执行了。。。。。。");
    //模拟通过uname查询数据库
    User user = new User();
    user.setUname(uname);
    user.setAge(20);
    user.setDate(new Date());
    return user;
}

jsp

<form action="anno/testModelAttribute" method="post">
    名字:<input type="text" name="uname"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交"><br>
</form>

测试结果

user = User{uname='heh', age=23, date=Wed Feb 24 13:16:45 CST 2021}

流程分析:

(1)showUser方法先拿到form表单传进来的数据。

(2)showUser方法将数据库查到的数据封装到User中,并返回User对象。

(3)testModelAttribute方法的参数为showUser方法的返回值,根据表单提交的数据对user对象的uname,age进行覆盖。

方法二(无返回)
测试案例

controller

@RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
    System.out.println("ModelAttribute执行。。。。。。");
    System.out.println("user = " + user.toString() );
    return "success";
}

@ModelAttribute
public void showUser(String uname, Map<String,User> map){
    System.out.println("showUser执行了。。。。。。");
    //模拟通过uname查询数据库
    User user = new User();
    user.setUname(uname);
    user.setAge(20);
    user.setDate(new Date());
    map.put("abc",user);
}

jsp

<form action="anno/testModelAttribute" method="post">
    名字:<input type="text" name="uname"><br>
    年龄:<input type="text" name="age"><br>
    <input type="submit" value="提交"><br>
</form>

测试结果

user = User{uname='heh', age=23, date=Wed Feb 24 13:37:09 CST 2021}

流程分析:

(1)showUser方法把User对象存进Map集合。

(2)testModelAttribute方法再根据key值取出User对象。

修饰参数

获取指定数据给参数赋值

属性

1.value:用于获取数据的key(属性名称/map结构的key)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值