我想为内置组件创建一个自定义渲染器:<h:selectOneRadio />
我想知道,如何确定内置组件的渲染器以创建自己的渲染器并从中扩展?
我想知道一种获取它的机制,以便我可以应用它来确定任何其他内置组件的渲染器而不仅仅是for <h:selectOneRadio />
.
谢谢
标准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
.
归档时间: |
|
查看次数: |
1336 次 |
最近记录: |