0

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

提前致谢。

4

2 回答 2

2

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

于 2012-05-07T14:56:56.107 回答
0

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

请参考下面提到的配置。并阅读 Spring Documentation 以获得更好的理解。

    <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>

希望这对您有所帮助。干杯。

于 2012-05-08T09:16:04.830 回答