Java:如何在运行时将数据库中的属性添加到ResourceBundle?
问题描述:
背景Java:如何在运行时将数据库中的属性添加到ResourceBundle?
我正在开发一个使用Maven的Java Web应用程序。我已经创建了此路径和格式的ResourceBundles:src/main/resources/i18n/LanguageBundle_xx_XX.properties。
一切工作完美,我有一切工作在前端(使用JSTL)。
问题
用户可以创建键/值对,从前端,即随后被存储在格式MySQL数据库:KEY | VALUE
我有一个初始化servlet,在将用户带到第一个jsp页面之前完成所有设置。
在初始化servlet中,我从数据库中获取所有KEY/VALUE对,但现在我想将它们添加到LanguageBundle中,以便翻译在第一个jsp页面出现时准备好。
到目前为止,我已经试过:
- 返回所有的键/值对从DB
- 迭代返回的值
- 如果项不LanguageBundle_xx_XX
- 存在添加KEY/VALUE property.put(“KEY”,“VALUE”)
现在,它确实添加了该属性,但是如果我尝试访问该范围之外的特定属性(例如,其他servlet,jsp),则会失败,因为它不存在于特定的.properties文件中。
我该如何解决这个问题?
答
UPDATE:
我想出了一个可行的解决方案。
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);
有人可以告诉我,如果这是不好的做法或是否可以使用?
谢谢。
到目前为止创建的内容不是ResourceBundle,而是属性文件。您需要查看创建ResourceBundle的各种方法,这是一个* object *。 – EJP
我觉得@EJP理念有一些优点。我也一样。问题不在于属性文件,问题在于创建资源包,使其不仅从文件中读取数据,还从数据库中读取数据。也许看看http://stackoverflow.com/questions/2451049/do-resource-bundles-in-java-support-runtime-string-substitution? –