【问题标题】:Java: How do I add properties from a database to a ResourceBundle on runtime?Java:如何在运行时将属性从数据库添加到 ResourceBundle?
【发布时间】:2016-12-22 00:02:42
【问题描述】:

背景

我正在使用 Maven 开发 Java Web 应用程序。我以这种路径和格式创建了 ResourceBundles:src/main/resources/i18n/LanguageBundle_xx_XX.properties

一切都完美无缺,我的一切都在前端工作(使用 JSTL)。

问题

用户可以从前端创建 KEY/VALUE 对,然后以以下格式存储在 MySQL 数据库中:KEY | 价值

我有一个初始化 servlet,它在将用户带到第一个 jsp 页面之前完成所有设置。

在初始化 servlet 中,我从数据库中获取所有 KEY/VALUE 对,但现在我想将它们添加到 LanguageBundle 以便在显示第一个 jsp 页面时准备好翻译。

到目前为止我已经尝试过:

  1. 从数据库中返回所有键/值对
  2. 迭代返回的值
  3. 如果 KEY 在 LanguageBundle_xx_XX 中不存在
  4. 使用 property.put("KEY","VALUE") 添加 KEY/VALUE

现在,这确实添加了属性,但是如果我尝试访问该范围之外的特定属性(例如,其他 servlet、jsp),它会失败,因为它不存在于特定的 .properties 文件中。

我该如何解决这个问题?

【问题讨论】:

  • 到目前为止,您创建的不是 ResourceBundle,而是属性文件。您需要研究创建 ResourceBundle 的各种方法,它是一个 object
  • 我觉得@EJP 的想法有一些优点。我有同样的。问题不在于属性文件,问题在于创建资源包,使其不仅从文件中读取,还从数据库中读取。也许看看stackoverflow.com/questions/2451049/…

标签: java maven jsp servlets resourcebundle


【解决方案1】:

更新:

我想出了一个可行的解决方案。

Properties prop = new Properties();
    InputStream in = getClass().getResourceAsStream("/i18n/LanguageBundle_en_US.properties");
    prop.load(in); 
prop.setProperty("KEY", "VALUE");
in.close();
prop.store(new FileOutputStream(getClass().getClassLoader().getResource("/i18n/LanguageBundle_en_US.properties").getFile()), null);

有人可以告诉我这是不好的做法还是可以使用?

谢谢。

【讨论】:

  • 您正在覆盖现有文件,这可能会在下次出现时出现问题。我认为您应该尝试找到一种方法来修改内存中的值。
  • 感谢您回复我。我确实覆盖了实际的 .properties 文件,但是,它只发生在目标文件夹中。那些 KEY|VALUE 对是最后的,也是我唯一会添加的属性。我看得出来你的担心。我将让它暂时工作并在稍后阶段恢复它。如果我想出更好的解决方案,我会更新我的答案。祝你有美好的一天。
  • 如果你使用的是 Spring,你可以使用org.springframework.core.io.support.PropertiesLoaderUtils,它的作用是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 2018-09-01
相关资源
最近更新 更多