你的位置:首页 > Java教程

[Java教程]SSH框架中session问题


  使用SSH框架做项目的时候避免不了使用session,有时候使用session会很方便,但是有时候也是个很麻烦的事情,我今天就遇到一个这样的情况,搞的我很不爽,还是记录一下吧。

  首先是登录的时候,如果用户名密码正确就把该用户的信息存到session中去,

//登录成功后将用户信息保存到session中      SessionUtils.setSysUserToSession(request, sysUser);

/**   * 保存当前登录用户的信息到session中去   * @param request   * @param sysUser   */  public static void setSysUserToSession(HttpServletRequest request,      SysUser sysUser) {    HttpSession session=request.getSession();    if(sysUser==null){      return;    }    session.setAttribute("sysUserKey",sysUser);  }

登录成功后,在一个页面上需要弹出一个模态窗口,在模态窗口上添加一条部门信息,然后关闭模态窗口,在页面上显示出来数据列表。

显示数据列表采用的是JQUERY和AJAX联合异步加载,就是在$(function(){})中使用ajax从后台取到数据,然后以JSON的方式返回到前台,在将具体的数据给表格对应的列。

  开始的时候弹出模态窗口没有问题,添加一条数据也没有问题,但是关闭模态窗口之后数据列表的数据并没有更新,必须刷新之后才可以再数据列表中看到信添加的一条数据,

刚开始还以为是弹出模态窗口的问题,也以为是页面缓存的问题,反正就是各种纠结啊,但是后来无意识的看到了后台代码才想到了问题的关键,下面先上解决的代码:

<SCRIPT type="text/javascript">    $(function(){      //alert("0000");      //异步加载组织信息      $.ajax({        url: "user/organizaAction_selectAllOrg.do",        type: "post",        dataType: "json",        cache : false,        success: function(da){          $("#orgTbody").empty();          $.each(da,function(index,value){            if(value.owner==value.currentUser){            var  tr="<tr>" +                  "<td>"+value.orgname+"</td>" +                  "<td>"+value.owner+"</td>" +                  "<td>"+value.orgremark+"</td>" +                  "<td>" +                    "<a class='btn btn-default' onclick='showModal("+value.id+")' href='javascript:;'><i class='fa fa-cog'></i> 设置</a>" +                    "<a class='btn btn-default' href='javascript:;' onclick='showUser("+value.id+")'><i class='fa fa-male'></i> 组织成员</a>" +                  "</td>" +                "</tr>";            }else{            var  tr="<tr>" +                  "<td>"+value.orgname+"</td>" +                  "<td>"+value.owner+"</td>" +                  "<td>"+value.orgremark+"</td>" +                  "<td>" +                    "<a class='btn btn-default' href='javascript:;'><i class='fa fa-sign-in'></i> 退出</a>" +                    "<a class='btn btn-default' href='javascript:;'><i class='fa fa-male'></i> 组织成员</a>" +                  "</td>" +                "</tr>";            }            $("#orgTbody").append(tr);          });        }      });    });  </SCRIPT>

这个是异步加载的js

public void selectAllOrg(){    SysUser sysUser=SessionUtils.getSysUserFromSession(request);        Integer id=sysUser.getId();    SysUser curUser=sysUserService.findSysUserById(id);        Set<Organization> setList=curUser.getOrganizations();    OrgUtil org;    List<OrgUtil> orgList=new ArrayList<OrgUtil>();    for(Organization o:setList){      org=new OrgUtil();      org.setId(o.getId());      org.setOrgname(o.getOrgname());      org.setOrgremark(o.getOrgremark());      org.setOwner(o.getOwner());      org.setCurrentUser(sysUser.getCnname());      orgList.add(org);    }    writeJson(orgList);  }

这个是后台的查找全部信息的代码,关键在哪呢?就在

SysUser sysUser=SessionUtils.getSysUserFromSession(request);        Integer id=sysUser.getId();    SysUser curUser=sysUserService.findSysUserById(id);

这三行代码中,开始的时候是没有查找用户的这两行代码的,直接从session中取出的用户,然后根据取出的用户来查找。

之所以查找不出来是因为:从session中拿过来的用户是登录时候的用户,此时这个用户并没有跟你新建的部门关联,所以是查找不到新建的部门的,只有重新load一下用户才能拿到新建的部门信  息。

      恩,暂时就是这样了。