【问题标题】:How to override primefaces component api class with custom class如何使用自定义类覆盖 primefaces 组件 api 类
【发布时间】:2014-10-26 20:43:37
【问题描述】:

我面临p:treeTable 中列的重复 ID 问题,即与以下链接中描述的问题相同

http://forum.primefaces.org/viewtopic.php?f=3&t=31158&p=99463#p99463

所以我想按照上述解决方案中的建议实施解决方案。所以我想更改源代码并重新编译并使用 jar,但我没有得到这样做的许可。我被要求通过扩展 org.primefaces.component.api.UITree 类来自定义类,或者以某种方式不更改 primefaces jar 中的实际类。

所以现在假设我创建了一个同名 UITree 的类并为我做了必要的更改。无论如何要注册这个类,以便可以使用我的类而不是primefaces类

【问题讨论】:

    标签: jsf-2 primefaces jsf-2.2


    【解决方案1】:

    经过一番努力,我找到了解决问题的方法

    我已经编写了扩展 primefaces TreeTable 类的类,如下所示,并实现了链接中指定的方法 visitColumns(在我的问题中给出)。

    您必须覆盖子类中所有调用visitColumns 方法的方法。

    现在在 faces-config.xml 中注册它,如下所示

     <component>
        <component-type>org.primefaces.component.TreeTable</component-type>
        <component-class>com.example.component.MyTreeTable</component-class>
     </component>  
    

    我相信这是最简单的方法并解决了我的问题。回答我自己的问题,以便对其他人有所帮助。

    【讨论】:

      【解决方案2】:

      你有两个选择:

      1. 只要放在WAR项目的Java源码文件夹中即可,保持原有的包结构(因此具有完全相同的FQN)。 WAR 中的类在类加载方面比 WAR 的 /WEB-INF/lib 中的 JAR 中的类具有更高的优先级。因此,如果在 WAR 中遇到完全相同的类(通过 FQN),那么它将从 WAR 而不是从 JAR 加载(在本例中是 PrimeFaces 的类)。

      2. &lt;p:treeTable&gt;的组件类型上注册WAR项目的faces-config.xml中的组件类:

        <component>
            <component-type>org.primefaces.component.TreeTable</component-type>
            <component-class>com.example.component.CustomTreeTable</component-class>
        </component>
        

        同样,在 WAR 的 faces-config.xml 中注册的任何组件类都比 JAR 的 faces-config.xml 中的组件类具有更高的优先级(在这种特殊情况下,PrimeFaces 的组件类)。

      【讨论】:

      • 感谢您的回答。我已经找到了做到这一点的方法,我相信我发布的答案也更容易。感谢战争和罐子优先权。学到了一些新东西:)
      猜你喜欢
      • 2015-11-13
      • 2013-05-05
      • 2012-06-23
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 2020-07-18
      相关资源
      最近更新 更多