本帖最后由 lq38366 于 2012-11-26 17:40:02 编辑

解决方案 »

  1.   

    难道不可以在修改部门信息时就修改session吗?
      

  2.   

    ServletActionContext.getRequest().getSession().setAttribute("updateDep",employee);你这个只能修改当前用户的session,有什么用?
    你是想修改别的用户吧,你要取得那个用户所对应的session。因此,你需要一个Map<User,Session> 用于获取相应用户的session
      

  3.   


     恩, 你说的没错。 我们现在的思路也是这样.ServletActionContext.getRequest().getSession().setAttribute("updateDep",employee);当这句话执行完之后,就应该进入监听器中的 attributeAdded 方法。我们有个sessionMaps 存放的就是所有用户的session信息。然后根据已经更新过部门信息的员工名称将 sessionMaps存放的session信息给invalidate, 因为更新了部门信息所以强制用户重新登录。现在的问题就是当更新完部门信息之后,操作session 这代码只执行一遍, 修改完一个后,后面继续修改部门 。ServletActionContext.getRequest().getSession().setAttribute("updateDep",employee);上面这句话就不执行了, 也就无法让HttpSessionListener 监听了,
      

  4.   


    我估计是执行的吧,只是监听没起作用。第二次修改后,执行语句,updateDep属性值仍是employee,什么都没有改变的话,会引起监听反应吗?
      

  5.   

    session.setAttribute(name,value);
    如果两次设置的name相同,只在第一次set时触发session的attributeAdded事件,
    所以你的代码好像只执行了一次一样。
    解决方案是设定时间标志:
    Date dateFlag=new Date();
    session.setAttribute("dateFlag",dateFlag);
    session.setAttribute(name+dateflag,value);//这样能保证你每次设置属性都能触发事件在attributeAdded方法中用以下语句获取value:
    Date dateFlag=session.getAttribute("dateFlag");
    SomeObject obj=session.getAttribute(name+dateFlag);OKAY.
      

  6.   

          good ide , 已经按这思路解决.  CSDN  牛人还是很多呀。