在将应用程序从 Struts 1.2.x 迁移到 Spring MVC 时,我陷入了 JSP 中必须使用
.properties
查找文件中的标签的位置。
在旧代码中,应用程序使用了 Struts 的 MessageTag 和使用 Struts 中的 TagUtils.message() 的自定义标签来指定需要从中获取给定键的值的包名称。
现在迁移到 Spring,我已经在 SpringContext.xml 中定义了所有查找文件包,如下所示:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basenames">
<list>
<value>/WEB-INF/lookups/abc</value>
<value>/WEB-INF/lookups/xyz</value>
...
</list>
</property>
</bean>
将
spring:message
标签与键一起使用为 code
可以完美地工作,直到我达到 2 个查找包使用相同键但具有不同值的地步。理想情况下,我只需将键重命名为唯一,但考虑到需要进行的代码更改,这是不可行的。
我想知道是否有一种方法可以以某种方式指定包名称,以便在键不明确的情况下,Spring 知道从哪个包中获取值。
我想过将
MessageSource
或 ReloadableResourceBundleMessageSource
扩展到自定义类并实现一个提供我正在寻找的功能的方法,但我基本上陷入了死胡同,没有任何文档或此类实现的示例。
您是说
abc
和 xyz
有一些重叠的键?如果是这样,其中一个被另一个覆盖了:
请注意,由于顺序查找,先前资源包中的消息定义将覆盖后面资源包中的消息定义。
您将不得不使用不同的方法,创建多个消息源 bean 并将不同的 bean 加载到不同的 Spring 上下文中。