struts2的session问题,非常奇怪,求大神答疑

jzsoft2 2015-06-11 06:10:26
在struts2的action中执行了ActionContext.getContext().getSession().put("user", user);
user和roles是多对多关系,role和area是多对多关系,我在修改了role对应的area后,再从session中读取user以及关联的area,具体如下:
User user = (User)ActionContext.getContext().getSession().get("user");
if(!"admin".equals(user.getLoginName())){
for(Role role : user.getRoles()){
for(Area area : role.getAreas()){
hasList.add(area.getId());
}
}
发现role.getAreas()读取的总是当初put时的值,而不是role修改后的值,也就是说将user put到session中后,修改了user关联的外键内容,但后面将user从session中读出来,再读其关联的外键内容,其外键内容并没有更新,请问为什么呢
...全文
230 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
jzsoft2 2015-06-12
  • 打赏
  • 举报
回复
user和role对多对多的关系,现在修改了role中对应的内容,还要判断当前修改的role是否和session中的user关联,非常麻烦,不能级联修改吗,也就说如果session中保存的user对象关联的外键role内容做了修改,session中的也就自动修改
  • 打赏
  • 举报
回复
你应该修改后重新加载session 然后再去取值,才能拿到新put的
乱世丶桃花 2015-06-12
  • 打赏
  • 举报
回复
你数据库里做了修改,session中的user并没有修改啊,在往session中保存user的时候,对应的role也是保存在session了,当你把user从session中读出来时,这个user对象的role也是之前保存时候的role,举个例子: user(“张三”,role:“管理员,厕所长,局长”),保存在session中,然后修改数据库把张三这个人的角色改为:“普通成员,厕所长”, 但session中保存的还是user(“张三”,role:“管理员,厕所长,局长”),user.getRoles()得到的是“管理员,厕所长,局长”,并没有去从数据库中查询
geyuliu 2015-06-12
  • 打赏
  • 举报
回复
楼上正解!你update关联对象只是更新数据库的记录,不会更新session的内容
jzsoft2 2015-06-12
  • 打赏
  • 举报
回复
修改的这个role,是session中存入的user的外键关联内容。为什么role的内容修改了,而后从session中读出的user,再通过user读取与之关联的role,发现role中的数据为修改前的数据,为什么没有更新过来呢
u010484259 2015-06-12
  • 打赏
  • 举报
回复
更新的是数据库的内容 又不是session的内容,再说session失效后数据就丢失了
IT丶小青年 2015-06-11
  • 打赏
  • 举报
回复
role修改后的值跟session没有关系呀,因为你role修改并不是修改session中的内容

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧