JavaWeb项目,每个JSP页面参数互不影响;设置页面JavaScript的全局参数;ajax传递JSON;

场景描述:

        诸如管理员查看其它用户的页面。起初后台中是将查看的用户的数据保存在session中,前台使用EL标签获取并展示。导致的问题是一次只能查看一个用户的信息,当同时查看两个用户的页面时,则会导致新打开的用户页面的数据串到之前打开的用户页面中。后来想到,使用request来避免页面数据乱套的问题,虽然前台只需要使用EL标签来获取,但是后台需要设置很多的request.setAttribute(),想到这就放弃了该方法。

        之前在网上找,并没有找到类似的文章或是别人的解决办法,这个问题困扰了我很长一段时间,不知道是否有人和我遇到一样的问题,所以我在这里说下我的解决办法,有和我同样问题的希望可以帮到。

我的解决办法:

        JSP页面的JavaScript中,将用户数据在设置为全局变量,有效范围为当前这个页面。点击页面某些部分修改参数都将修改当前页面的全局参数,使用ajax提交请求时,提交当前页面的用户数据。打开其他页面,其他页面也有自己的全局用户数据,这样每次请求都使用这个全局参数进行传递,后台只需要获取并处理即可。

$(function(){
    //设置当前页面全局参数,有效范围当前页面,点击搜索之后更新
    window.$searchContent='${searchContent}';
    ...
})    

        如上,左边为JavaScript的全局变量定义,右边为用EL标签获取后台传过来值。为了突出是调用全局参数,调用的时候特意加上window:

$.ajax({
    url:search.do,
    type:"post",
    data:{searchContent:window.$searchContent,conditionJsonStr:JSON.stringify(conditionJson)},
    dataType:"json",
    success:function(data){
        loadFacet(data);
        loadPage(data);
    },
    error:function(){
        location.href=encodeURI("error.do?exception=Ajax搜索异常");
    }
});

by the way:        

        ajax传递参数如果直接放入的是JSON对象,则后台使用request.getParameter()是获取不到的。需要先将JSON转为字符串,后台使用JSONObject.fromObject()将字符串转换成JSON对象即可。


猜你喜欢

转载自blog.csdn.net/HenryMrZ/article/details/81039763
今日推荐