【问题标题】:How to reload ResourceBundles that are used by JSF?如何重新加载 JSF 使用的 ResourceBundles?
【发布时间】:2010-01-12 09:31:19
【问题描述】:

我想在单击按钮时以编程方式重新加载 JSF 使用的 ResourceBundle。类路径中的 ResourceBundles(即 WEB-INF/classes)被外部应用程序修改,修改事件是我知道的。

【问题讨论】:

    标签: java jsf


    【解决方案1】:

    试试

    ResourceBundle.clearCache(Thread.currentThread().getContextClassLoader());
    

    (你可以使用相同的方法不带参数)

    来自javadoc

    getBundle 工厂方法创建的资源包实例默认会被缓存,如果已经缓存,工厂方法会多次返回同一个资源包实例。 getBundle 客户端可以清除缓存,使用生存时间值管理缓存的资源包实例的生命周期,或者指定不缓存资源包实例。详见getBundle工厂方法、clearCache、ResourceBundle.Control.getTimeToLive、ResourceBundle.Control.needsReload的描述。

    【讨论】:

    • 解决方案很好,但类加载器不是真的。我宁愿使用线程中的上下文类加载器。您现在依赖于实际加载相关 bean/action 类的类加载器,它本身可能与加载资源包的类加载器不同。
    • 那会是 FacesContext.getClass().getClassLoader() 吗?
    • 对不起,我忘了说我在 Java 1.4 上运行,并且从 Java 1.6 开始添加了 clearCache() 方法。在这种情况下,该怎么办?无论如何,感谢您的回复。
    • 我没有1.4的类,但是你可以尝试使用反射来清除ResourceBundle类的内部缓存。
    猜你喜欢
    • 2022-08-14
    • 2014-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 2013-08-25
    • 2011-05-25
    • 1970-01-01
    相关资源
    最近更新 更多