Компоновка JSF-компонента SelectOneRadio
очень ограничена, поэтому я написал для нее собственный Renderer, и он прекрасно работает. Однако бывают случаи, когда я хочу использовать и стандартный макет SelectOneRadio. Поэтому я решил сделать свой новый компонент, который использует созданный мной пользовательский рендерер, но я хочу, чтобы этот новый компонент отражал функциональность SelectOneRadio
, и единственное отличие состоит в том, что он будет использовать мой рендерер. Нужно ли мне создавать и custom tag
, и custom component
, чтобы использовать мой custom renderer
в этом случае? Какие class
мне нужно расширить, чтобы получить все функции от SelectOneRadio
? Я был бы очень признателен, если бы вы могли предоставить некоторые коды.
EDIT
@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.