【发布时间】:2011-03-30 17:57:23
【问题描述】:
我们使用 JSF2.0 和 JDK1.6 和 Tomcat6.1
我们需要在不重新启动服务器的情况下更新属性文件值(由 JSF 资源包加载),以便不会停止实时 Web 会话。
JDK1.6 可以吗,我尝试了下面的 clearCache 代码,但是没有用。
ResourceBundle bundle = ResourceBundle.getBundle("Label");
String s = bundle.getString("profile.firstName");
out.println("Value before: %"+ s);
ResourceBundle.clearCache(Thread.currentThread().getContextClassLoader());
bundle = ResourceBundle.getBundle("Label");
s = bundle.getString("profile.firstName");
out.println("Value after: {}"+s);
以前有没有人尝试过。
更新
下面似乎没有解决重新加载资源包的问题
ResourceBundle.clearCache(Thread.currentThread().getContextClassLoader());
ApplicationResourceBundle applicationBundle = ApplicationAssociate.getCurrentInstance().getResourceBundles().get("Label");
Field field = applicationBundle.getClass().getDeclaredField("resources");
field.setAccessible(true);
Map<Locale, ResourceBundle> resources = (Map<Locale, ResourceBundle>) field.get(applicationBundle);
resources.clear();
我错过了什么吗?
【问题讨论】:
-
您确定您拥有正确捆绑包的句柄吗?代码中的“标签”字符串需要替换为您的捆绑包。我断点了这段代码并为 ApplicationAssociate.getCurrentInstance().getResourceBundles() 添加了一个监视,然后查看了其中的内容。
-
顺便说一句,我正在使用 JSF2、JDK1.6、Glassfish 3.1.1
标签: java tomcat jsf-2 resourcebundle