You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Igor Vaynberg (JIRA)" <ji...@apache.org> on 2008/02/09 20:47:09 UTC
[jira] Resolved: (WICKET-1331) getModelValue() in
AbstractSingleSelectChoice and ListMultipleChoice can't handle complex list
items type correctly
[ https://issues.apache.org/jira/browse/WICKET-1331?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Igor Vaynberg resolved WICKET-1331.
-----------------------------------
Resolution: Won't Fix
i dont see how indexof() is broken for complex types, especially since i rarely use choice components with collections of strings. please provide a working example of where this fails for you in a form of a quickstart. thanks.
> 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: Bug
> 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
> Assignee: Igor Vaynberg
> Original Estimate: 0.5h
> Remaining Estimate: 0.5h
>
> 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.