bee*_*ter 6 java spring annotations spring-mvc
Spring 3参考资料告诉我们:
将它放在方法参数上时,
@ModelAttribute将模型属性映射到特定的带注释的方法参数
我不明白这个魔法咒语,因为我确定ModelMap在执行请求处理程序方法后,模型对象的别名(如果使用返回类型的键值)传递给View.因此,当请求处理程序方法执行时,模型对象的名称无法映射到方法参数.
为了解决这个矛盾,我去了stackoverflow并找到了这个详细的例子.例子的作者说:
//"personAttribute"模型已从JSP传递给控制器
看来,他被Spring引用所吸引......
为了消除魅力,我在我的环境中部署了他的示例应用程序,并从方法中残留地剪切了@ModelAttribute注释MainController.saveEdit().结果应用程序无需任何更改即可运行!所以我得出结论:@ModelAttribute不需要注释将Web表单的字段值传递给参数的字段.然后我坚持这个问题:@ModelAttribute注释的意思是什么?如果唯一的意思是在View中为模型对象设置别名,那么为什么这种方式比显式添加对象更好ModelMap呢?
关键是@ModelAttribute可选 - 如果参数没有注释且其类型没有特殊含义(即它不是HttpServletRequest,ModelMap等等),它被视为注释@ModelAttribute参数.
因此,@ModelAttribute在两种情况下实际需要:
指定属性的名称.如果@ModelAttribute省略或具有空value,则使用默认名称(带有第一个字母decapitalized的参数的类型名称).
如果参数的类型具有特殊含义.例如,如果您的域对象作为属性扩展传递java.security.Principal,则需要对其进行注释,否则Spring将传递结果HttpServletRequest.getUserPrincipal().
有些人倾向于在@ModelAttribute没有实际需要的情况下使用以记录论证的含义.
| 归档时间: |
|
| 查看次数: |
6770 次 |
| 最近记录: |