我想为内置组件创建自定义渲染器:<h:selectOneRadio />
我想知道,我如何确定内置组件的渲染器,以便创建自己的组件并从中扩展?
我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器,而不仅仅是<h:selectOneRadio />
。
感谢
答案 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_FAMILY
“javax.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
。