[ https://issues.apache.org/jira/browse/WICKET-1331?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12567856#action_12567856 ]
Matej Knopp commented on WICKET-1331: ------------------------------------- What you do is just wrong. There is a contract specified on the equals method and you just violate it. # public boolean equals(Object obj) # { # if (obj instanceof Long) # return id.equals(obj); # Your equals method is not symmetric. I really don't see why we should clutter wicket code with something like that just because you can't be bothered to write a proper choice renderer. > 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 > Attachments: testproject.zip > > 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.