背景
我们有一个使用JSF2.0的在线应用程序(一个附带Web-sphere应用程序服务器v8.5.5)+ PrimeFaces 5.0
要求
对于特定要求,我们必须自定义org.primefaces.component.messages.MessagesRenderer。我们注意到没有干净的方法来定制org.primefaces.component.messages.MessagesRenderer。 作为解决方法,我们在Web Source文件夹中创建了一个org.primefaces.component.messages.MessagesRenderer类。该类最终在WebInf / classes
中问题
初始部署时,prime-faces.jar在WebInf / classes中加载了org.primefaces.component.messages.MessagesRenderer的版本,并且所有内容都按预期工作。 经过进一步调查,显然战争类加载行为不一致。我们无法保证Prime Faces框架工作加载了哪个版本的org.primefaces.component.messages.MessagesRenderer。有时,应用程序从WebInf / classes加载org.primefaces.component.messages.MessagesRenderer的版本,有时会从WebInf / lib / primefaces-5.0.jar加载版本
Servlet3.0清楚地说明了
Web应用程序类加载器必须从WEB-INF / classes加载类 首先是目录,然后是WEB-INF / lib目录中的库JAR。
所以不确定为什么我们会遇到这种不一致的行为。
尝试了什么&建议
我们尝试引用了 servlet启动时的org.primefaces.component.messages.MessagesRenderer 监听器。
我的一位同事建议删除primefaces jar中的org.primefaces.component.messages.MessagesRenderer 文件。这将解决问题,但定制第三方库违反了我们公司的政策。
摘要
总之,我们真正想要的是一种在Prime-faces中自定义org.primefaces.component.messages.MessagesRenderer而无需修补primefaces jar文件的方法。
答案 0 :(得分:0)
刚刚找到解决此问题的方法
在应用程序中添加以下代码片段faces-config.xml允许我覆盖primefaces中的MessageRenderer
<renderer>
<component-family>org.primefaces.component</component-family>
<renderer-type>org.primefaces.component.MessageRenderer</renderer-type>
<renderer-class>my.CustomRenderer</renderer-class>
</renderer>