【问题标题】:Custom renderer for PrimeFaces component works fine in Tomcat, but not in WebspherePrimeFaces 组件的自定义渲染器在 Tomcat 中可以正常工作,但在 Websphere 中却不行
【发布时间】:2013-04-01 22:14:50
【问题描述】:

我正在使用 MyFaces 2.1.9 和 PrimeFaces 3.5。我已经为<p:inputText> 实现了一个自定义渲染器。这适用于 Tomcat。但这不适用于 Websphere。我在自定义渲染器类中放置了断点,但它们从未被命中。我的日志中也没有看到任何内容。但是,当我在标准 JSF <h:inputText> 上注册相同的自定义渲染器时,它可以正常工作。

我在faces-config.xml注册如下:

<render-kit>
    <renderer>
        <component-family>org.primefaces.component</component-family>
        <renderer-type>org.primefaces.component.InputTextRenderer</renderer-type>
        <renderer-class>xxx.xxx.xxx.MyInputRenderer</renderer-class>
    </renderer>
</render-kit>

如何解决自定义渲染器的注册问题?

【问题讨论】:

  • RenderKit#addRenderer()上的断点开始。
  • 谢谢!现在我知道我的渲染器首先被处理,然后常规渲染器出现在 addREnderer 中并覆盖了我的!我该如何解决这个问题?
  • 好吧,这确实解释了。你的faces-config.xml 呢?在/WEB-INF/lib 的自定义模块JAR 文件中或直接在webapp 的/WEB-INF 中?如果在 JAR 中,则加载顺序未定义。如果它是在 PrimeFaces 之前加载的,那么你就会遇到这个问题。
  • 它在我的常规网络模块中。这是我的位置:/WEB-INF/spring/faces-config.xml。我用 javax.faces.CONFIG_FILES 上下文参数指向那个 URL。
  • 尝试直接在main/WEB-INF/faces-config.xml中声明。

标签: jsf jsf-2 websphere myfaces custom-renderer


【解决方案1】:

需要覆盖 3rd 方组件库的渲染器的自定义渲染器需要在 webapp 自己的faces-config.xml 中注册,而不是在 faces-config.xml 中注册,faces-config.xml 也包含在 /WEB-INF/lib 中的另一个 JAR 中。 JAR 文件的加载顺序未指定,因此可能会发生自定义渲染器在您想要覆盖的第 3 方组件库之一之前加载和注册 ,就像您面对的那样.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2016-08-26
    • 2015-03-16
    • 2017-08-16
    • 2020-05-25
    相关资源
    最近更新 更多