2013-09-26 285 views
0

我已经使用Spring MVC创建了一个webapp。我在我的serlvet调度设立国际通过拦截这样的:通过webapp的全局变量(Spring)

<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> 
    <property name="paramName" value="lang" /> 
</bean> 

<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"> 
    <property name="defaultLocale" value="es" /> 
</bean> 

然后我可以访问当前区域在我的控制器是这样的:

LocaleContextHolder.getLocale() 

这是真棒,因为我可以再任何时候改变我的语言环境,并访问任何地方的当前配置。现在

我想这样做与以类似的方式表现了一些自定义变量一样,在这个意义上,他们稍微影响了我所有的应用程序的行为。 (例如,“可访问”参数指示应该仅提供可访问内容的应用程序)。

我明白我可以创建自己的拦截器拦截名为“入店”像这样的任何PARAM:

<bean id="localeChangeInterceptor" class="com.myapp.MyInterceptor"> 
    <property name="paramName" value="accesible" /> 
</bean> 

但是有没有我可以像LocaleContextHolder的物体确实在我的应用程序访问该值的方法语言环境?我可以让Spring通过cookie likeso注入吗?

+0

存储在Application范围中的属性是应用程序的全局变量。这是JEE应用程序范围,但Spring提供了一种获取它的方法。 – DwB

+0

你可以扩大一点你的答案吗? –

回答

0

当您在整个应用程序说,你的意思是“全”的应用程序(如服务,DAO /库)或只有应用程序的Web部件? RequestContextHolder(http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/web/context/request/RequestContextHolder.html)会帮助你的情况吗?它有一个选项来检索作为RequestAttributes接口实现的currentRequestAttributes。

我没有亲自尝试过,但RequestAttributes javadoc引号“支持访问请求范围的属性以及会话范围的属性,以及”全局会话“的可选概念。”

+0

这看起来像我在找什么,但你会如何将参数注入此RequestContextHolder? –

+0

如果你能告诉我们你从哪里得到这个参数,它可能会有所帮助。但是如果该参数已经在http请求中,那么你已经在上下文持有者中拥有了它。否则,可以在过滤器或拦截器中进行。 – prabugp