getModelValue() in AbstractSingleSelectChoice and ListMultipleChoice can't
handle complex list items type correctly
-------------------------------------------------------------------------------------------------------------------
Key: WICKET-1331
URL: https://issues.apache.org/jira/browse/WICKET-1331
Project: Wicket
Issue Type: Improvement
Components: wicket
Affects Versions: 1.3.0-final, 1.3.1
Environment: Suse 10.3, JRE 1.6 (1.6.0_04-b12), jetty 6.1.7
Reporter: Sergiy Yevtushenko
AbstractSingleSelectChoice.getModelValue() implementation uses List.indexOf()
to find the key and this causes problems if list of choices contains complex
values rather than simple list of String instances. In this case indexOf()
returns -1 and this can't be resolved by overriding equals() for list elements.
This happens because internally AbstractList.indexOf() invokes equals() method
of passed key value passing it list items as a parameter. Also, current
implementation may pass key returned by getModelObject() to IChoiceRender,
while it expects values from list of items. Correct implementation of this
method may look so:
-------------------------
public String getModelValue()
{
// @@ Modified by SIY
Object object = getModelObject();
if (object != null)
{
// compare choice items with given keys and pass down
// to IChoiceRenderer list item rather than key
Iterator iter = getChoices().iterator();
int i = 0;
while (iter.hasNext())
{
Object obj = iter.next();
if (obj != null && obj.equals(object))
{
object = obj;
break;
}
i++;
}
if (i > getChoices().size())
i = -1;
return getChoiceRenderer().getIdValue(object, i);
}
return NO_SELECTION_VALUE;
}
-----------------------------------
Similar issues also present in ListMultipleChoice.getModelValue(), but they
can't be resolved by overriding this method in subclass because this method
declared final.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.