2017-08-07 82 views
0

覆盖JSF渲染器时,我有一个非常棘手的问题。当通过模块库提供时,覆盖PrimeFaces渲染器不工作

这是我的faces-config.xml中的一部分:

<?xml version="1.0" encoding="UTF-8"?> 
    <faces-config xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd" 
      version="2.0"> 
    <render-kit> 
     <renderer> 
      <component-family>org.primefaces.component</component-family> 
      <renderer-type>org.primefaces.component.MenubarRenderer</renderer-type> 
      <renderer-class>de.mycompany.web.MenuRenderer</renderer-class> 
     </renderer> 
    </render-kit> 
    <factory> 
     <exception-handler-factory>de.mycompany.web.ValidationExceptionHandlerFactory</exception-handler-factory> 
    </factory> 
</faces-config> 

我的web项目的情况如下

  • web应用(楼宇战争),依赖于核心和GUI
  • 核心(建筑罐)
  • gui(building jar),核心的依赖关系,包含xhtmls和@named Beans,依赖于com.sun.faces:jsf-impl版本2.1.25

当我把在faces-config.xml的含量在 web应用/ SRC /主/ web应用/ META-INF或 芯/ SRC /主/ web应用/ META-INF 两者的MenuRenderer和ValidationExceptionHandlerFactory正在被使用。是啊。

当我把在faces-Config的内容 GUI/src目录/主/ web应用/ META-INF 已经习惯了ValidationExceptionHandlerFactory,但不是MenuRenderer。 WTF?

而且其他所有功能(相听众,系统事件侦听器,我在我的脸上,配置使用,除了那些在渲染-KIT-节点工作。

你有什么想法,有什么我”在做了?

问候,六甲

回答

1

你试图覆盖由另一个外部库,而不是一个标准的渲染提供的渲染器。

通过外部库提供的faces-config.xml的加载顺序是德发ult未定义。在你的具体情况下,你的库显然加载之前 PrimeFaces库加载。

您可以通过faces-config.xml中的<ordering>元素明确指定加载顺序。 PrimeFaces库的名称是primefaces。所以,只需将以下条目添加到您的faces-config.xml即可。确保你为图书馆提供了一个名字,以便最终用户可以在必要时重新订购他们自己的faces-config.xml

<name>yourlibrary</name> 

<ordering> 
    <after> 
     <name>primefaces</name> 
    </after> 
</ordering> 

一个真实世界的例子可以在例如OptimusFaces这也延伸PrimeFaces。