#author("2019-11-18T15:31:32+08:00","default:Admin","Admin") SpringMVC

在一个Controller内,被@ModelAttribute标注的方法会在此controller的每个handler方法执行前被执行。

被@ModelAttribute标注的方法的参数绑定规则和普通handler方法相同。

可以理解为:

  1. 请求到达Controller后,不论其他handler方法的RequestMapping值是多少,请求都会路由至被@ModelAttribute标注的方法;
  2. 由springMVC再对request执行一次forward,路由至真正的handler方法。

注解方法入参

@ModelAttribute("attrName")用在方法入参上时,作用为:

从当前的隐式model对象中取key值attrName所对应的attrValue值,并将attrValue赋给被注解的参数。 而且自动暴露为模型数据用于视图页面展示时使用

@ModelAttribute指定注解的value值attrName

如下所示,myUser和newParam两个model属性对应的attrValue值,将被赋值给方法入参。

@ModelAttribute("myUser")
public User userModelAttributeMethod2(Model model){
    User user = new User();
    user.setAge(31);
    user.setName("James");
    user.setEmail("123456@qq.com");
    
    model.addAttribute("newParam","new parameter");
    return user;
}


@RequestMapping("/testHandler")
public String testHandler(@ModelAttribute("myUser") User user,@ModelAttribute("newParam") String newParam){
    System.out.println(user);
    System.out.println(newParam);
    return "testModelAttribute";

@ModelAttribute注解value值缺省

  这时默认的attrName为类型名称的首字母小写。

  如下例,user能够从model中获取,但是 newParam从model中获取的值为null

@ModelAttribute("user") //此处必须是 user
public User userModelAttributeMethod2(Model model){
    User user = new User();
    user.setAge(31);
    user.setName("James");
    user.setEmail("123456@qq.com");

    model.addAttribute("newParam","new parameter");
    return user;
}


@RequestMapping("/testHandler")
public String testHandler(@ModelAttribute User user,@ModelAttribute String newParam){
    System.out.println(user);
    System.out.println(newParam);
    return "testModelAttribute";
}


iディレクトリで複数のポータルサイトにディレクトリ登録

コメント:



(画像の文字列を入力して下さい)

トップ   編集 凍結 差分 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019/12/02 (月) 12:42:27 (1628d)

e[NȂECir Yahoo yV LINEf[^[Ōz500~`I
z[y[W ̃NWbgJ[h COiq@COsیI COze