自定义 org.primefaces.component.messages.MessagesRenderer
Customising org.primefaces.component.messages.MessagesRenderer
背景
我们有一个使用 JSF2.0 的在线应用程序(Web-sphere 应用程序服务器 v8.5.5 附带的一个)+ PrimeFaces 5.0
要求
对于特定要求,我们必须自定义 org.primefaces.component.messages.MessagesRenderer。我们注意到没有干净的方法来自定义 org.primefaces.component.messages.MessagesRenderer 。
作为解决方法,我们在 Web Source 文件夹中创建了 class org.primefaces.component.messages.MessagesRenderer。这个 class 最终在 WebInf/classes
问题
在初始部署时,prime-faces.jar 在 WebInf/classes 中加载了 org.primefaces.component.messages.MessagesRenderer 的版本,一切都按预期进行。
经过进一步调查,很明显 war class 加载行为不一致。我们无法保证 Prime Faces 框架加载了哪个版本的 org.primefaces.component.messages.MessagesRenderer。有时,应用程序从 WebInf/classes 加载 org.primefaces.component.messages.MessagesRenderer 的版本,有时它从 WebInf/lib/primefaces-5.0.jar
加载版本
Servlet3.0明确指出
Web 应用程序 class 加载程序必须从 WEB-INF/classes 加载 classes
首先是目录,然后是 WEB-INF/lib 目录中的库 JAR。
所以不确定为什么我们会遇到这种不一致的行为。
尝试过的和建议的
我们尝试引用
org.primefaces.component.messages.MessagesRenderer 在 servlet 启动中
听众.
我的一位同事建议删除 primefaces jar 中的 org.primefaces.component.messages.MessagesRenderer
文件。这将解决问题,但自定义第三方库违反了我们公司的政策。
总结
总而言之,我们真正想要的是一种无需修补 primefaces jar 文件即可在 prime-faces 中自定义 org.primefaces.component.messages.MessagesRenderer 的方法。
刚刚找到这个问题的解决方案
在 applications 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>
背景
我们有一个使用 JSF2.0 的在线应用程序(Web-sphere 应用程序服务器 v8.5.5 附带的一个)+ PrimeFaces 5.0
要求
对于特定要求,我们必须自定义 org.primefaces.component.messages.MessagesRenderer。我们注意到没有干净的方法来自定义 org.primefaces.component.messages.MessagesRenderer 。 作为解决方法,我们在 Web Source 文件夹中创建了 class org.primefaces.component.messages.MessagesRenderer。这个 class 最终在 WebInf/classes
问题
在初始部署时,prime-faces.jar 在 WebInf/classes 中加载了 org.primefaces.component.messages.MessagesRenderer 的版本,一切都按预期进行。 经过进一步调查,很明显 war class 加载行为不一致。我们无法保证 Prime Faces 框架加载了哪个版本的 org.primefaces.component.messages.MessagesRenderer。有时,应用程序从 WebInf/classes 加载 org.primefaces.component.messages.MessagesRenderer 的版本,有时它从 WebInf/lib/primefaces-5.0.jar
加载版本Servlet3.0明确指出
Web 应用程序 class 加载程序必须从 WEB-INF/classes 加载 classes 首先是目录,然后是 WEB-INF/lib 目录中的库 JAR。
所以不确定为什么我们会遇到这种不一致的行为。
尝试过的和建议的
我们尝试引用 org.primefaces.component.messages.MessagesRenderer 在 servlet 启动中 听众.
我的一位同事建议删除 primefaces jar 中的 org.primefaces.component.messages.MessagesRenderer 文件。这将解决问题,但自定义第三方库违反了我们公司的政策。
总结
总而言之,我们真正想要的是一种无需修补 primefaces jar 文件即可在 prime-faces 中自定义 org.primefaces.component.messages.MessagesRenderer 的方法。
刚刚找到这个问题的解决方案
在 applications 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>