我需要在不重启服务器的情况下动态更新JSF2.0(Primefaces)工具提示。
意义需要找到一种方法,可以在不需要重新启动服务器的情况下更改正在运行的应用程序的工具提示(来自属性文件的atm)。
我们正在运行websphere并部署一个非爆炸的EAR(可能会说服部署爆炸战争)
请提出任何想法或提示。谢谢你
答案 0 :(得分:4)
value
组件的p:toolTip
属性必须是EL表达式或文字文本。通常,可以在工具提示的EL表达式中引用使用var
标记的f:loadBundle
属性声明的资源包。
使用basename
属性声明的底层资源包可以由属性文件本身支持(在这种情况下,您需要将属性文件放在类路径的相应目录中),或者就此而言是一个自定义的ResourceBundle实现,可以从属性文件(位于容器外部)或数据库或任何商店中读取。
因此,您可以从现有的EL表达式更改为:
<f:loadBundle var="msg" basename="propfile_location" />
到
<f:loadBundle var="msg" basename="fully qualified class name of the ResourceBundle class" />
简单来说,您需要滚动自己的ResourceBundle类以支持各种语言环境。不用说,但是你需要覆盖ResourceBundle.getObject(java.lang.String)
方法,因为在评估引用ResourceBundles的EL表达式时ResourceBundleELResolver
实现调用它。
此外,您需要确保ResourceBundle的ResourceBundle.getObject(java.lang.String)
实现始终重新获取并返回与提供的密钥对应的值。无法确保这一点意味着资源包提取的初始值可能会在后续调用时返回,尤其是在缓存初始值时。即使您部署了爆炸的WAR文件,也可以在不重新部署应用程序的情况下修改属性文件内容,这可能会遇到此行为,这就是为什么使用不缓存值的自定义ResourceBundle实现很重要的原因。 / p>