ajax session更新,ajax请求session超时时解决办法
发布日期:2022-03-15 11:49:55 浏览次数:30 分类:技术文章

本文共 2992 字,大约阅读时间需要 9 分钟。

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 ^

转载地址:https://blog.csdn.net/weixin_34574003/article/details/119436781 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:修复win10的更新服务器,win10升级服务器异常怎么解决_win10升级服务器发生异常修复方法...
下一篇:微信免密支付服务器忙,微信免密支付 查询用户授权记录,调起商家预授权 都返回系统繁忙...

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月18日 01时52分26秒