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一下用户才能拿到新建的部门信  息。

      恩,暂时就是这样了。

 

你可能感兴趣的:(session)