2012-05-07 26 views
0

我目前的项目需要一个自定义的“系统日期”,这意味着系统日期和它在i18n属性文件中定义的格式。但是处理它的类是一个通用工具类,但不在web层中。但是,语言环境(计算日期格式)必须从HttpServletRequest对象中检索。我正在考虑将一个HttpServletRequest实例自动装入该实用程序类。它似乎打破了设计模式,但我想这是盗版。但它不起作用。那么这有什么问题,还有没有更好的方法来解决Spring中任何其他层的Locale?Autowire HttpServletRequest?解决区域设置?

在此先感谢。

回答

2

简单地重载实用程序类以接受Locale作为受影响方法的参数,会不会更优雅?然后,您可以检索控制器中的区域设置并将其传递给实用程序。

+0

谢谢你的快速回答pap。这里的问题是系统日期不是从明确的“请求”中检索的,它应该在用户在浏览器中点击Web应用程序的URL时在索引页面上显示。我知道我们可以根据任何url模式创建一个控制器,但是我们可以从“/”请求中获得显式的HttpServletRequest实例吗?谢谢。 – Dreamer

0

我更喜欢你使用Spring框架的SessionLocaleResolver。它会更改和存储会话中的语言环境,因此您可以在应用程序的任何代码点获取该语言环境。

请参考下面提到的配置。为了更好的理解,也请阅读Spring文档。

<mvc:interceptors> 
     <ref bean="localeChangeInterceptor"/> 
    </mvc:interceptors> 

    <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.SessionLocaleResolver"> 
     <property name="defaultLocale" value="en"/> 
    </bean> 

    <bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basenames"> 
     <list> 
      <value>/WEB-INF/i18n/labels</value> 
      <value>/WEB-INF/i18n/messages</value> 
     </list> 
     </property> 
     <property name="defaultEncoding" value="UTF-8"/> 
    </bean> 

希望这可以帮助你。干杯。