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

时间:2012-10-11 02:27:39

标签: jsf-2

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

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

感谢

1 个答案:

答案 0 :(得分:7)

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

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

您的出发点是the javax.faces.component.html package summary<h:selectOneRadio>HtmlSelectOneRadio组件类表示。 its javadoc的介绍性文字说:

  

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

有渲染器类型。

组件系列在the very same javadoc的“COMPONENT_FAMILY继承的”字段下指定为UISelectOne常量。点击"Constant field values"

  

public static final java.lang.String COMPONENT_FAMILYjavax.faces.SelectOne

有组件系列。

现在,我们应该查看特定于实现的faces-config.xml文件(或它的工件)。遗憾的是它的位置/名称没有记录,但我可以告诉我,在Mojarra的情况下,它是实现JAR文件中的com/sun/faces/jsf-ri-runtime.xml文件(您可以使用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>

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

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

另见: