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