项目使用struts2+EXT结合,现在的问题是,EXT都是ajax请求,在操作过程中,session超时进入自定义拦截器,返回重新登陆的URL对应login页面,但是由于是ajax请求页面不会跳转,这个有没有办法解决? 整个项目都已经编码完成,所以能不能在架构的层面解决这个问题。这样要修改的工作量比较小。。

解决方案 »

  1.   

    ajax本来就是无刷新页面处理方式,你这样的使用,只能在拦截器中response返回一个标志到前台,前台js提取repsonseText,并获得标志,然后使用location = "登录页面";
      

  2.   

    在请求的时候判断是否session过期,返回个参数不就好了?过期的话就打开登陆页面,关闭当前页面,或者替换当前页面!~~~~~~~~~~~~~~
      

  3.   

    session超时进入拦截器。可在web.xml中配置拦截AJAX请求,拦截到AJAX的请求后可以通过httpResponse.setStatus(1000) 设置状态值,AJAX回调函数获取到状态信息处理您的逻辑代码。
      

  4.   

    楼上几层的都说让根据拦截器里面 判断session过期后,返回一个标识到前台,可是一个项目里面每个页面都是增删改查及其它操作,这样要在每一个操作的方法里面去判断那个标识,这种方法理论可行,可是是一件很累及枯燥的方法。楼主有什么好方法没啊??
      

  5.   

    关于struts2拦截Ext界面上的请求,今天自己已经搞定了
      

  6.   

    两次登录么。。就这样解决。
    ajax一次,success了再form提交跳转
      

  7.   

    遇到同样问题 问题解决 前来回帖
    if(this.isSubmitByAjax(request)){
       BaseAction action = (BaseAction)invocation.getAction();
       action.setMessage("您尚未登录或会话已过期!");
       return Constants.RESULT_NONE;
    }
    上面是服务器端核心代码 
    我所有的action都继承了BaseAction 并且BaseAction中有message变量 如果是ajax提交的 拦截器拦截后获得action 然后给message赋值 在客户端获得response中message的值即可
      

  8.   

    怎么判断这个请求时ajax啊!isSubmitByAjax(request)。吧这个方法贴出来吧
      

  9.   

    看来以后做系统,JS也要有架构,否则有问题要做横切性的修改就头痛了。
    其实要解决的就是某局部Ajax请求发现超时的时候如何刷新整个页面,
    相信这个问题的答案在Ext上面。