weixin_42393436 2013-01-29 10:42
浏览 419
已采纳

如何设置@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条回答

  • jinnianshilongnian 2013-01-30 08:54
    关注

    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 等不同的标识符来存储,和普通的区分开

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站