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.