自动装配HttpServletRequest?要解决Locale?

时间:2012-05-07 14:40:50

标签: spring servlets spring-mvc locale autowired

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

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我更喜欢你使用Spring Framework的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>

希望这会对你有所帮助。欢呼声。