You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by "Alexander Langer (JIRA)" <de...@myfaces.apache.org> on 2005/12/20 20:42:41 UTC
[jira] Created: (MYFACES-966) t:Radio not checked correctly with f:selectItem and non-String backing bean property
t:Radio not checked correctly with f:selectItem and non-String backing bean property
------------------------------------------------------------------------------------
Key: MYFACES-966
URL: http://issues.apache.org/jira/browse/MYFACES-966
Project: MyFaces
Type: Bug
Environment: Jboss 4.0.3, EJB3, JBoss Seam, Facelets
Reporter: Alexander Langer
Look at this simple selectOneRadio tag:
<t:selectOneRadio id="question" value="#{haqInput.testme}" layout="spread">
<f:selectItem itemValue="0" itemLabel="a"/>
<f:selectItem itemValue="1" itemLabel="b"/>
<f:selectItem itemValue="2" itemLabel="c"/>
<f:selectItem itemValue="3" itemLabel="d"/>
</t:selectOneRadio>
<t:radio for="question" index="0" />
<t:radio for="question" index="1" />
<t:radio for="question" index="2" />
<t:radio for="question" index="3" />
#{haqInput.testme} is an Integer property of the backing bean haqInput.
If you submit the form to another view and come back to this page (I'm using a next/prev wizard), none of the rendered radio buttons contains
the "checked" attribute. However, if you remove the "layout=spread" attribute, one of the default radio buttons (the non-t:radio versions) are rendered correctly including the "checked" attribute.
I have digged into the problem. In Tomahawk's HtmlRadioRenderer.java we read:
renderRadio(facesContext,
uiSelectOne,
itemStrValue,
selectItem.getLabel(),
selectItem.isDisabled(),
currentValue == null && itemValue == null ||
currentValue != null && currentValue.equals(itemValue), false);
However, the equals() check is false since <f:selectItem itemValue="1" itemLabel="b"/> will render the actual itemValue as a String() class,
but currentValue's class is of type Integer. I have verified this in some debug output I just added to the file:
20:40:59,583 INFO [STDOUT] itemValue: 3, type java.lang.String
20:40:59,583 INFO [STDOUT] currentValue: 3, type java.lang.Integer
I don't know how the standard myfaces version of selectOneRadio checks for equality, so this is probably how you would do this. I just added
another "|| currentValue != null && currentValue.toString().equals(itemStrValue)" in the condition above, this works for me but is probalby only a back hack.
Another workaround is probably using a backing bean and f:selectItems, where the itemValue variables are already of type Integer as well. I'm going to try this out now, because the t:inputDate in the latest subversion checkout is broken as well. *sigh*
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira