JSF 组件SelectOneRadio
布局非常有限,所以我为它编写了一个自定义渲染器,它工作得很好。但是,有时我也想使用标准的 SelectOneRadio 布局。所以我决定让我的新组件利用我创建的自定义渲染器,但我希望这个新组件能够反映 的功能SelectOneRadio
,唯一不同的是它将使用我的渲染器。在这种情况下,我是否需要同时创建custom tag
并custom component
使用我custom renderer
的?我class
应该扩展什么来获得所有功能SelectOneRadio
?如果您能提供一些代码,我将不胜感激。
编辑
@BalusC:我喜欢你关于检测layout
委托正确渲染器的值的想法。因此,如果我有 layout="div_layout",那么它工作得很好,但如果它是pageDirection
或lineDirection
没有出现。我所做的是:我创建了一个类extends MenuRenderer
并覆盖了encodeEnd
方法,所以在那里我做了这个
String layout = (String) component.getAttributes().get("layout");
if(layout != null){
if(layout.equals(PAGE_DIRECTION) || layout.equals(LINE_DIRECTION)){
super.encodeEnd(context, component);
return;
} else if (!layout.equals(DIV_LAYOUT)){
//Throw error message
}
}
//Continue with my own renderer code
EDIT2
上面当我说什么都没出现时,我错了。super.encodeEnd(上下文,组件);确实渲染了,但不是渲染收音机,而是渲染select option
标签。所以看来我委托给了错误的渲染器。我需要使用 RadioRenderer 而不是 MenuRenderer。