如何在spring MVC应用程序中激活实际请求之外的Request Scope?

时间:2012-04-20 10:24:26

标签: spring-mvc

我有一个spring mvc应用程序,它大量使用在a中定义的bean 请求范围。现在我必须在此范围之外使用此应用程序的一部分(在 qwertz在Magnolia CMS工作)。这当然不起作用:

  

创建名为'requestHelper'的bean时出错:范围'请求'是   对当前线程不活跃

我无法更改bean的范围,我无法更改代码。所以我唯一的可能性 似乎将当前线程的范围更改为请求范围模型。

我试过像

这样的东西
XmlWebApplicationContext context = (XmlWebApplicationContext) ApplicationContextProvider.getApplicationContext() ;
   MockServletContext mockServletContext = new MockServletContext("/");
   context.setServletContext(mockServletContext);
   context.refresh();

但是这仍然不会激活当前线程中的请求范围。我怎样才能实现   此?

1 个答案:

答案 0 :(得分:1)

可以按如下方式激活请求范围:

RequestContextHolder.setRequestAttributes(
    new ServletRequestAttributes(new MockHttpServletRequest()));     

...

((ServletRequestAttributes) RequestContextHolder.getRequestAttributes())
    .requestCompleted();
RequestContextHolder.resetRequestAttributes(); 

Thoguh我认为在生产代码中使用这样的黑客并不是一个好主意。