替换JSP Web应用程序中的默认resourceBundle和resourceControl实现

时间:2015-06-29 08:18:45

标签: java jsp jstl jsp-tags

在现有Web应用程序(JSP,Struts)中,本地化通过JSTL标记fmt:setbundle,fmt:message和.properties文件进行管理。

我想摆脱.properties文件并使用替代数据源进行本地化。

为了我的目标,我已经创建了自定义ResourceBundle和ResourceControl实现(有关数据选取位置的详细信息,xml,数据库,超出范围),但我想知道如何注册和使用它们默认/基于工厂文件的实现,因此我不必在Web应用程序文件中修改标记代码(fmt:message ...)。

我看到的示例指向替换fmtResourceKey会话值,但它仅限于一个捆绑包,它看起来像是" hack"。

有什么好主意吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

好吧,我似乎整理了子类化/自定义 java.util.ResourceBundle ,它还带有自定义 ResourceBundleControl ResourceBundleControlProvider 的实现(通过服务提供商接口注入 - SPI)。

此页面中描述了类似的解决方案:

https://docs.oracle.com/javase/tutorial/i18n/serviceproviders/resourcebundlecontrolprovider.html

但缺少一个重要提示:“将您的JAR放入VM”,因为 ResourceBundle.GetBundle 方法在内部使用Serviceloader.LoadInstalled,它搜索安装在Java VM中的自定义提供程序,如中所述LoadInstalled 文档:

  

此方法仅供安装的提供程序使用   期望。生成的服务将仅查找并加载提供者   已经安装到当前的Java虚拟机中;供应商   在应用程序的类路径上将被忽略。

谢谢!