SSH框架中session问题

9/6/2015来源:Java教程人气:1549

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

      恩,暂时就是这样了。