SpringMessage 碰到的小问题

本贴最后更新于 2759 天前,其中的信息可能已经时过境迁

0.起因

项目是一个基础开发平台类的项目,首页的 JSP 页面上被设置了一个 Title,直接使用的 <spring:message> 标签来显示配置的项目名称,本来没有什么问题的,都在中文语境下,所以国际化也只写了一个 LocaleStrings_zh_CN,而且面向用户一般都用 360,QQ浏览器,火狐,Chrome 啊之类的,所以没啥问题。但是好死不死的最近一个项目的用户有人使用了 IE11,发现总是显示登录成功但是无法进入首页。

1.过程

检查日志,发现总是提示无法找到项目名称。这就奇了个大怪同事在各种漫无目的的测试配置文件路径啊什么的,但是依然无效。后来静下心来发现 IE11 的 HTTP RequestHeaderAccept-Languagezh-Hans-CN。!!划重点!!,这个坑爹的玩意儿啊 IE11 说我支持的是简体中文 zh-Hans-CN 啊,于是我可爱的服务器就去忠诚的找 LocaleStrings_zh_Hans_CN 去了,当然不可能找到啊!我又没有配置。。。

2.解决

一开始想的是复制一份改个名字就草草了事了,但是转念一想这么不是很不负责任么?要是以后扩展的时候这个就是坑啊!但是怎么解决呢?追着 Exception 里的 ResourceBundleMessageSource 去看代码,发现了还有个 parentMessageSource 属性,目的是 MessageSource 如果找不到 code 就去 parentMessageSource 中查找,那么我是不是就可以利用一下呢?于是就给配置了一下,将正常的 MessageSource 依然指向项目里的国际化文件夹,但是 parentMessageSource 直接明确指向 LocaleStrings_zh_CN,这样即使以后别的语言来了,没有支持的配置也可以直接用默认的简体中文了~ 主要修改的地方

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="language/LocaleStrings" />
<property name="defaultEncoding" value="utf-8" />
<property name="parentMessageSource">
  <bean class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="language/LocaleStrings_zh_CN" />
    <property name="defaultEncoding" value="utf-8" />
  </bean>
</property>
</bean>
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
</bean>

3.反思

这么写确实是解决了眼下的问题,而且也着眼了将来。但是思来想去,应该本来就有解决方案的,但是昨晚更替着急,就先这样了。留个记录,以便闲暇时候仔细瞅瞅。
说到底这个起因还是怪当初的设计,抖机灵的做法。用 SpringMessage 标签没啥,但是不认真用就是态度问题了。有些时候,用一些东西还是问一句为什么比较好。

  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    943 引用 • 1460 回帖 • 1 关注
  • 异常
    20 引用 • 47 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...