如何确定内置组件的渲染器

Ang*_*gel 3 jsf-2

我想为内置组件创建一个自定义渲染器:<h:selectOneRadio /> 我想知道,如何确定内置组件的渲染器以创建自己的渲染器并从中扩展?

我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器而不仅仅是for <h:selectOneRadio />.

谢谢

Bal*_*usC 7

标准JSF组件的呈现器类是特定于实现的(Mojarra和MyFaces各自拥有自己的实现),并<renderer>在特定于实现faces-config.xml(或其工件)中注册.

要找到它,您首先需要首先了解组件系列和渲染器类型,以便您可以在特定于实现的faces-config.xml文件中查找渲染器类.

你的出发点是javax.faces.component.html包的摘要.它<h:selectOneRadio>HtmlSelectOneRadio组件类表示.其javadoc的介绍性文字说:

默认情况下,rendererType属性必须设置为" javax.faces.Radio".

有渲染器类型.

组件系列COMPONENT_FAMILY同一个javadoc的 "Fields inherited from UISelectOne"部分下指定为常量.单击"常量字段值":

public static final java.lang.String COMPONENT_FAMILY " javax.faces.SelectOne"

有组件系列.

现在,我们应该查看特定于实现的faces-config.xml文件(或它的工件).遗憾的是它的位置/名称没有记录,但我可以告诉我,在Mojarra的情况下,它是com/sun/faces/jsf-ri-runtime.xml实现JAR文件中的文件(您可以使用zip工具提取JAR文件).打开它并查找<renderer>与组件系列javax.faces.SelectOne和渲染器类型匹配的条目javax.faces.Radio:

<renderer>
    <component-family>javax.faces.SelectOne</component-family>
    <renderer-type>javax.faces.Radio</renderer-type>
    <renderer-class>
         com.sun.faces.renderkit.html_basic.RadioRenderer
    </renderer-class>
</renderer>
Run Code Online (Sandbox Code Playgroud)

最后有它:com.sun.faces.renderkit.html_basic.RadioRenderer.

请注意,完全延伸该类将您的自定义渲染器与特定的JSF实现紧密耦合.您的渲染器不能在MyFaces等其他实现上重复使用.要独立于实现,您需要自己编写整个渲染器并进行扩展javax.faces.renderer.Renderer.

也可以看看: