在覆盖JSF渲染器时,我遇到了一个非常棘手的问题。
这是我的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>
我的网络项目的结构如下:
当我将faces-config.xml的内容放入时 webapp / src / main / webapp / META-INF或 芯/ SRC /主/ web应用/ META-INF MenuRenderer和ValidationExceptionHandlerFactory都被使用了。呀。
当我将faces-config的内容放入时 GUI / SRC /主/ web应用/ META-INF ValidationExceptionHandlerFactory正在使用,但不是MenuRenderer。 WTF?
此外,所有其他功能(我在faces-config中使用的阶段监听器,系统事件监听器除了render-kit-nodes中的功能外都在工作。
你有什么想法,我做错了什么?
此致,Rokko
答案 0 :(得分:1)
您正在尝试覆盖由其他外部库提供的渲染器,而不是标准渲染器。
默认情况下,外部库提供的faces-config.xml
的加载顺序是未定义的。在您的特定情况下,在加载PrimeFaces库之前,您的库显然已加载 。
您可以通过<ordering>
中的faces-config.xml
元素明确指定加载顺序。 PrimeFaces库的名称是primefaces
。因此,只需将以下条目添加到faces-config.xml
即可。确保为您的图书馆提供一个名称,以便最终用户可以根据需要在他们自己的faces-config.xml
重新排序。
<name>yourlibrary</name>
<ordering>
<after>
<name>primefaces</name>
</after>
</ordering>
现实世界的例子可以在例如OptimusFaces也扩展了PrimeFaces。