【问题标题】:Replace default resourceBundle and resourceControl implementations in JSP web application替换 JSP Web 应用程序中的默认 resourceBundle 和 resourceControl 实现
【发布时间】:2015-09-15 15:12:06
【问题描述】:

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

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

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

我看到了指向替换 fmtResourceKey 会话值的示例,但它仅限于一个捆绑包,并且看起来像“黑客”。

有什么好主意吗?

感谢您的帮助!

【问题讨论】:

    标签: java jsp jstl jsp-tags


    【解决方案1】:

    好吧,看来我是通过子类化/自定义java.util.ResourceBundle整理出来的,它还带有自定义ResourceBundleControlResourceBundleControlProvider的实现(通过服务提供者接口注入 - SPI)。

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

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

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

    此方法适用于仅安装的提供程序 想要的。生成的服务只会找到并加载提供者 已安装到当前的 Java 虚拟机中;提供者 应用程序的类路径上的将被忽略。

    谢谢!

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多