我正在使用Spring MVC异步处理,但控制器不会在Web浏览器上返回视图。
@RequestMapping(value = "/generateGM", method = RequestMethod.POST)
public Callable<ModelAndView> generateGMReport(@RequestParam("countryCode") int countryCode, ModelAndView mv) {
Callable<ModelAndView> c = new GenericCallable(countryCode, reportDao, mv);
return c;
}
@Override
public ModelAndView call() throws Exception {
List<CostReport> gmList = reportDao.generateGrossMarginReport(countryCode);
mv.setViewName("gmReport");
mv.addObject("gmList", gmList);
return mv;
}
我曾尝试修改代码以返回Callable,但它仍然没有返回到指定的视图名称。
我正在使用JBoss 7.1。
部署期间出现警告:
WARN [org.jboss.as.ee] (MSC service thread 1-7)
JBAS011006: Not installing optional component
org.springframework.web.context.request.async.StandardServletAsyncWebRequest
due to exception: org.jboss.as.server.deployment.DeploymentUnitProcessingException:
JBAS011054:
Could not find default constructor for class
org.springframework.web.context.request.async.StandardServletAsyncWebRequest
原因:也许sitemesh无法从Spring MVC框架(AsynContext)设置响应对象。
是什么原因?
请帮忙。
感谢。
答案 0 :(得分:1)
由于Sitemesh过滤器在请求结束时进行了一些后处理,因此需要支持Servlet 3异步请求功能才能使其正常工作。当初始Servlet容器线程退出并且响应保持打开状态时。如果Sitemesh过滤器不知道这一点,它将尝试提前完成处理。
答案 1 :(得分:1)
我不期望在sitemesh上。但它也是一个servlet,因此它们遵循“命令链”模式,这意味着它可能无法传输您需要的正确URL。你可以在web.xml
中发布异步spring和sitemesh配置的配置吗?答案 2 :(得分:-1)
它可能会有所帮助。以字符串而非 ModelAndView 返回。