【发布时间】:2012-12-12 14:56:57
【问题描述】:
我正在使用 spring deferredresult(servlet 3 async) 进行 ajax 请求处理。但是在返回 deferedresult 后,在 ajax 请求成功方法中我没有得到响应对象。任何人都知道可能是什么原因为此?我是否在配置中遗漏了什么?
下面是ajax调用代码:
function sendajaxreq() {
$
.ajax({
url : "plantView/testLink",
type : "GET",
data : "",
cache : false,
success : function(messages) {
alert(messages);
},
error : function(xhr) {
if (xhr.statusText != "abort" && xhr.status != 503) {
console
.error("Unable to retrieve chat messages. Chat ended.");
}
}
})
}
控制器代码:
@RequestMapping(value = "/testLink", method = RequestMethod.GET)
@ResponseBody
public DeferredResult<Map<String, WebView>> testLink() {
DeferredResult<Map<String, WebView>> chartsResult = new DeferredResult<Map<String, WebView>>();
Map<String, WebView> res = processSampleReq();
chartsResult.setResult(res);
chartsResult.onCompletion(new Runnable() {
@Override
public void run() {
System.out.println("deffered res completed");
}
});
return chartsResult;
}
即使在返回 chartsResult 之后,我在 ajaxcall 成功方法中仍将消息设为 null。
在 web.xml 中,我为使延迟结果正常工作所做的唯一更改是添加了对调度程序 servlet 和文件管理器映射的异步支持。
我使用的是 Spring 3.2.0.RELEASE 版本和 Tomcat 7.0.34。
谢谢, 迪普蒂。
【问题讨论】:
-
客户端代码、控制器代码、web.xml/配置类在哪里?
-
请查看已编辑的问题。
-
请查看在 Spring 上创建的 bug(已解决为无效)!他们面临着与您完全相同的问题!唯一的方法是在 Controller 服务方法之外设置 deferredResult。