myfaces-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Kitching <simon.kitch...@rhe.co.nz>
Subject Re: How to overwrite default renderer for <h:selectOneRadio> to include "for" attribute in <label>
Date Fri, 12 Jan 2007 01:47:20 GMT
Wendy Chou wrote:
> Hi,
> 
> I would like to render radio buttons differently to include the "for" 
> attribute in the label tag. So when I do this:
> 
> <h:selectOneRadio>
>     <f:selectItem value="#{bean.options}" />
> </h:selectOneRadio>
> 
> I want this set of radio buttons would render like so:
> 
> <label for="radio1">
>     <input type="radio" id="radio1" value="Y" />Yes
> </label>
> <label for="radio2">
>     <input type="radio" id="radio2" value="N" />No
> </label>
> 
> Currently I have extended the HtmlRadioRenderer class in the 
> org.apache.myfaces.renderkit.html.ext package. However I'm not sure how 
> to configure my faces-config so that all <h:selectOneRadio> tags would 
> use my extended renderer.
> 
> My main concerns are the <component-family> and <render-type> tags, as 
> I'm not sure what values to set them to. I tried doing:
> 
> <renderer>
>             <component-family>myRadio</component-family>
>             <renderer-type>org.apache.myfaces.Radio</renderer-type>
>             
> <renderer-class>com.my.example.extendedHtmlRadioRenderer</renderer-class>
> </renderer>
> 
> and
> 
> <renderer>
>             <component-family>myRadio</component-family>
>             <renderer-type>javax.faces.Radio</renderer-type>
>             
> <renderer-class>com.my.example.extendedHtmlRadioRenderer</renderer-class>
> </renderer>
> 
> but none worked.
> 
> Has anyone already gotten this to work, or perhaps can someone give me 
> suggestions as to what I should try?

As can be seen in the .tld file, h:selectOneRadio is handled by 
org.apache.myfaces.taglib.html.HtmlSelectOneRadioTag.

This tag class shows clearly that it uses renderer-type of 
"javax.faces.Radio".

The actual component type is javax.faces.HtmlSelectOneRadio, and 
inherits its COMPONENT_FAMILY from parent class UISelectOne, which 
defines it as "javax.faces.SelectOne".

So:
   <renderer>
     <component-family>javax.faces.SelectOne</component-family>
     <renderer-type>javax.faces.Radio</renderer-type>
     <renderer-class>....</renderer-class>
   </renderer>
should work for you.

Regards,

Simon

Mime
View raw message