[ https://issues.apache.org/jira/browse/WICKET-1331?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12567597#action_12567597 ]
Sergiy Yevtushenko commented on WICKET-1331: -------------------------------------------- I've attached test project based on quickstart which exposes the issue - attempt to access home page fails with following exception (relevant part): org.apache.wicket.WicketRuntimeException: No get method defined for class: class java.lang.Long expression: id at org.apache.wicket.util.lang.PropertyResolver.getGetAndSetter(PropertyResolver.java:433) at org.apache.wicket.util.lang.PropertyResolver.getObjectAndGetSetter(PropertyResolver.java:275) at org.apache.wicket.util.lang.PropertyResolver.getValue(PropertyResolver.java:84) at org.apache.wicket.markup.html.form.ChoiceRenderer.getIdValue(ChoiceRenderer.java:140) at org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.getModelValue(AbstractSingleSelectChoice.java:144) at org.apache.wicket.markup.html.form.FormComponent.getValue(FormComponent.java:744) at org.apache.wicket.markup.html.form.AbstractChoice.onComponentTagBody(AbstractChoice.java:344) ... If in HomePage.java make following changes: ... // default AbstractSingleSelectChoice.getModelValue(): //form.add(new DropDownChoice("option", getList(), new ChoiceRenderer("name", "id"))); <----- // Overridden AbstractSingleSelectChoice.getModelValue(); form.add(new ModifiedDropDownChoice("option", getList(), new ChoiceRenderer("name", "id"))); //<----- ... then home page is rendered properly. Also, this test application seems expose another issue which I didn't see before - attempt to submit for traps. Debugging shows that in this case entire choice list item is passed without conversion. I've not digged deeper. > 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.