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

标签 java jsp jstl jsp-tags

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

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

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

我看到了指向替换 fmtResourceKey session 值的例子,但它仅限于一个包,看起来像一个“hack”。

有什么好主意吗?

感谢您的帮助!

最佳答案

好的,看来我通过子类化/自定义 java.util.ResourceBundle 解决了问题,它还带有自定义 ResourceBundleControlResourceBundleControlProvider 的实现(通过服务提供商接口(interface) - SPI 注入(inject))。

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

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

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

This method is intended for use when only installed providers are desired. The resulting servicewill only find and load providers that have been installed into the current Java virtual machine; providers on the application's class path will be ignored.

谢谢!

关于java - 替换 JSP Web 应用程序中的默认 resourceBundle 和 resourceControl 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31110886/

相关文章:

java - type2 的 mysql 数据库的驱动程序名称和 url 是什么

java - 如何确保强制参数传递到 Spring MVC Controller 方法中?

java - jsp:include 运行时给出 404

java - JSF 2 中 JSTL forEach 的问题

css - 如何使用 JSTL/CSS 将首字母大写?

java - 如何从java中的字符串中删除所有 '\'字符

java - OSX 上的 Eclipse Java 不满意链接错误

Java/JSP输出文本文件

java - JSP,能不能像Ruby/Rails/Erb中的yield, layout, content_for一样工作

jsp - 如何将存储在属性文件中的数组放入 JSP 变量中