Spring异步处理不返回查看

时间:2013-03-13 09:50:57

标签: spring servlets spring-mvc asynchronous

我正在使用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)设置响应对象。

是什么原因?

请帮忙。

感谢。

3 个答案:

答案 0 :(得分:1)

由于Sitemesh过滤器在请求结束时进行了一些后处​​理,因此需要支持Servlet 3异步请求功能才能使其正常工作。当初始Servlet容器线程退出并且响应保持打开状态时。如果Sitemesh过滤器不知道这一点,它将尝试提前完成处理。

答案 1 :(得分:1)

我不期望在sitemesh上。但它也是一个servlet,因此它们遵循“命令链”模式,这意味着它可能无法传输您需要的正确URL。你可以在web.xml

中发布异步spring和sitemesh配置的配置吗?

答案 2 :(得分:-1)

它可能会有所帮助。以字符串而非 ModelAndView 返回。