使用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一下用户才能拿到新建的部门信 息。
恩,暂时就是这样了。