近期一个项目用到了easyUI,在使用过程中,遇到了一些个人觉得值得记录的注意点,片段化,在此记录谨供个人自由回忆,不保证质量!
copy自http://blog.163.com/xueling1231989@126/blog/static/102640807201412710184983/
*
在easyui中,会遇到session超时而当前tabs无法跳转到登陆页面。我在这里使用了filter,先判断session是否过期,然后根据request中的request.getHeader(“x-requested-with”)属性来判断是否ajax请求,然后针对easyui的ajax请求来设置返回信息,然后修改ajaxsetup,最后获取顶层窗口跳转。
1.使用filter,在过滤器doFilter方法中添加:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException{
................其他处理..................
/**
* easyui session超时处理
*/
if (request.getHeader("x-requested-with")!=null&&request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))
{
response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
response.getWriter().print("timeout"); //打印一个返回值,没这一行,在tabs页中无法跳出(导航栏能跳出),具体原因不明
return ;
}
2.新建一个common.js文件,添加如下2个function
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
alert('您没有权限访问此资源或进行此操作');
return false;
}
},
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=='timeout'){
//如果超时就处理 ,指定要跳转的页面
var top = getTopWinow(); //获取当前页面的顶层窗口对象
alert('登录超时, 请重新登录.');
top.location.href="/index.jsp"; //跳转到登陆页面,可以修改为自己需要跳转的页面
}
}
});
/**
* 在页面中任何嵌套层次的窗口中获取顶层窗口
* @return 当前页面的顶层窗口对象
*/
function getTopWinow(){
var p = window;
while(p != p.parent){
p = p.parent;
}
return p;
}