自定义org.primefaces.component.messages.MessagesRenderer

时间:2016-04-26 06:11:15

标签: jsf-2 primefaces classloader websphere-8

背景

我们有一个使用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文件的方法。

1 个答案:

答案 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>
相关问题