如何设置@SessionAttributes对象不被覆盖?

如在登录时设置@SessionAttributes("user")对象,在其它Controller的方法里要通过@ModelAttribute("user")取该对象,同时参数里有表单对象:
[code="java"]public Map save(@ModelAttribute("user")User user, Orders form){
...
}[/code]
表单里有和User对象相同的属性,其值会被覆盖,为啥InternalResourceViewResolver没有[b]allowSessionOverride[/b]属性设置不许覆盖,而FreeMarkerViewResolver却有?

1个回答

1、freemarker等非JSP模板没有request、session等概念,只有模型的概念,
按你说的allowSessionOverride表示是否允许session属性覆盖模型数据,默认是false,即不允许,如果重名则抛异常
2、EL表达式如${a.id} 默认先从pageContext--->request--->session--->application
[code="java"] /**
* Set whether HttpSession attributes are allowed to override (hide)
* controller generated model attributes of the same name. Default is "false",
* which causes an exception to be thrown if session attributes of the same
* name as model attributes are found.
*/
public void setAllowSessionOverride(boolean allowSessionOverride) {
this.allowSessionOverride = allowSessionOverride;
}[/code]

3、如在登录时设置@SessionAttributes("user")对象,在其它Controller的方法里要通过@ModelAttribute("user")取该对象,同时参数里有表单对象:
建议session里的登录用户使用如loginUser 等不同的标识符来存储,和普通的区分开

weixin_42393436
weixin_42393436 thanks jinnianshilongnian .
7 年多之前 回复
weixin_42393436
weixin_42393436 覆盖的是User对象里的属性,如Orders表单对象的"id"属性覆盖User对象的"id"属性,目前只能根据不同命名建议修改User对象的属性名称。
7 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐