我想为内置组件创建自定义渲染器:<h:selectOneRadio />
我想知道,如何确定内置组件的渲染器以创建自己的渲染器并从中扩展?
我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器,而不仅仅是<h:selectOneRadio />
.
谢谢
我想为内置组件创建自定义渲染器:<h:selectOneRadio />
我想知道,如何确定内置组件的渲染器以创建自己的渲染器并从中扩展?
我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器,而不仅仅是<h:selectOneRadio />
.
谢谢
标准 JSF 组件的渲染器类是特定于实现的(Mojarra 和 MyFaces 都有自己的实现),并且注册为<renderer>
特定于实现的faces-config.xml
(或它的工件)。
要找到它,你基本上需要先知道组件族和渲染器类型,这样你就可以自己在实现特定的faces-config.xml
文件中查找渲染器类。
您的出发点是包javax.faces.component.html
摘要。由组件类<h:selectOneRadio>
表示。它的 javadocHtmlSelectOneRadio
的介绍性文本说:
默认情况下,rendererType 属性必须设置为“
javax.faces.Radio
”。
有渲染器类型。
组件系列在同一个 javadocCOMPONENT_FAMILY
的“继承自的字段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>
最后是它:com.sun.faces.renderkit.html_basic.RadioRenderer
.
请注意,精确地扩展该类会将您的自定义渲染器与特定的 JSF 实现结合起来。您的渲染器将无法在不同的实现(例如 MyFaces)上重用。为了实现独立,您需要自己编写扩展的整个渲染器javax.faces.renderer.Renderer
。