ajax session更新,ajax请求session超时时解决办法

ajax请求session超时时解决方法

在做ajax应用时,如果一个会话已经超时,但是此时再通过ajax请求,那么ajax返回的则是一个登陆页面HTML代码,这肯定不是我们想要的。那么,怎样解决该问题呢?

1.ajax请求肯定会有返回信息

2.如果session超时时,需要返回提示信息

如何解决上面两个问题呢?

我们可以自定义一个存放结果信息的类,让它包含消息及结果

public class ExecuteResult {

private T result;

private String successMessage;

private List errorMessages = new ArrayList();

private Map fieldErrors = new HashMap();

private List warningMessages = new ArrayList();

public T getResult() {

return result;

}

public void setResult(T result) {

this.result = result;

}

public boolean isSuccess() {

return (this.errorMessages.isEmpty()) && (this.fieldErrors.isEmpty());

}

public String getSuccessMessage() {

return successMessage;

}

public void setSuccessMessage(String successMessage) {

this.successMessage = successMessage;

}

public List getErrorMessages() {

return errorMessages;

}

public void setErrorMessages(List errorMessages) {

this.errorMessages = errorMessages;

}

public Map getFieldErrors() {

return fieldErrors;

}

public void setFieldErrors(Map fieldErrors) {

this.fieldErrors = fieldErrors;

}

public List getWarningMessages() {

return warningMessages;

}

public void setWarningMessages(List warningMessages) {

this.warningMessages = warningMessages;

}

public void addErrorMessage(String errorMessage) {

this.errorMessages.add(errorMessage);

}

public void addFieldError(String field, String errorMessage) {

this.fieldErrors.put(field, errorMessage);

}

public void addWarningMessage(String warningMessage) {

this.warningMessages.add(warningMessage);

}

}

if(userName == null){

String requestType = request.getHeader("X-Requested-With");

//判断是否为AJAX请求

if(requestType!=null && "XMLHttpRequest".equals(requestType)){

ExecuteResult rlt = new ExecuteResult();

rlt.addErrorMessage("AJAX SESSION TIMEOUT.");

response.getWriter().write(JSONObject.fromObject(rlt).toString());

return Action.NONE;

}else{

return Action.LOGIN;

}

}

public class SearchResourceAction extends BaseSecurityAction {

private static final long serialVersionUID = -522813327706559035L;

@SuppressWarnings("unchecked")

private ExecuteResult executeResult;

//ExecuteResult setter and Getter方法省略..

@SuppressWarnings("unchecked")

public String getNodes() throws Exception {

String pid = "";

if (loadNode != null) {

pid = loadNode[0];

}

List objs = resourceService.searchResources(pid);

//executeResult.addErrorMessage("");

executeResult.setResult(objs);

return SUCCESS;

}

}

$.ajax({

url:url,

data:params,

type:'post',

dataType:'json',

success:function(data){

if(data.errorMessages && data.errorMessages.length > 0 ){

alert(data.errorMessages);

}else if(data.actionErrors && data.actionErrors.length > 0 ){

alert(data.actionErrors);

}else if(data.actionMessages.length > 0 ){

alert(data.actionMessages);

}else if(data.fieldErrors && data.fieldErrors.length > 0 ){

alert(data.fieldErrors);

}else{

//业务逻辑处理

}

}error:function(data){

alert(data);

}

});

一般自定义结果类型中不需要添加那么多添加消息的方法,但考虑到一半请求时,可以将ExecuteResult中的消息转给Action,在前台用Struts标签直接显示,所以就添加了很多消息属性。

这只是一个大体思路,牵扯到java泛型及Ajax请求判断等技术点。如果有更好的方法,那就求共享了 ^v ^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值