您的位置:首页 > 编程语言 > Java开发

@ModelAttribute注解和SpringMVC表单modelAttribute属性

2016-04-07 00:00 435 查看
摘要: @ModelAttribute注解,SpringMVC表单modelAttribute属性,@SessionAttribute注解异常。

@ModelAttribute注解

1.没有添加@ModelAttribute修饰的方法,在目标方法的参数对实体进行入参,该实体默认会从ModelMap中获取,如果不存在则创建新的对象作为入参参数。在进行数据绑定的时候(doBinder()方法),会将该实体放入到ModelMap中。

2.添加@ModelAttribute修饰的方法,在每个目标方法调用前都会执行该方法。

一般情况下,在form表单修改的时,某项字段规定为不可更改,就需要使用该注解标注的方法,根据id的获取与否,来从数据库中获取对应的实体,然后存放到ModelMap中。

SpringMVC表单ModelAttribute属性

使用SpringMVC表单标签,必须要在request中有一个和表单对应的bean。默认request的键为command。可以通过修改form标签的modelAttribute属性修改键的值。

@SessionAttribute注解和@ModelAttribute注解冲突:

没有使用@ModelAttribute修饰的方法,且在某个目标方法入参使用了@SessionAttribute注解value同名的实体对象,会抛出异常。

原因:

if (implicitModel.containsKey(name)) {
bindObject = implicitModel.get(name);
} else if (this.methodResolver.isSessionAttribute(name, paramType)) {
bindObject = this.sessionAttributeStore.retrieveAttribute(webRequest, name);
if (bindObject == null) {
raiseSessionRequiredException("Session attribute '" + name + "' required - not found in session");
}
}
在绑定参数前,此时Model中没有值,然后会进入另一个分支,就会抛出异常。
解决办法:

1.@SesionAttribute和方法入参处使用不同名的value值

2.添加@ModelAttribute修饰的方法,方法内将实体放入ModelMap中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息