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

Reply via email to