You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Per Newgro <pe...@gmx.ch> on 2012/01/24 10:42:18 UTC
[1.5.4] DropDownChoice is not presenting value if equals is not overwritten
Hi,
with 1.5.4 the implementation of
org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.java
has changed from
<code>
/**
* @see FormComponent#getModelValue()
*/
@Override
public String getModelValue()
{
final T object = getModelObject();
if (object != null)
{
int index = getChoices().indexOf(object);
return getChoiceRenderer().getIdValue(object, index);
}
else
{
return "";
}
}
</code>
to
<code>
/**
* @see FormComponent#getModelValue()
*/
@Override
public String getModelValue()
{
final T object = getModelObject();
if (object != null)
{
int index = getChoices().indexOf(object);
if (index < 0)
{
// the model is returning a choice that is not in the
available choices collection
logger.warn(
"Detected inconsistency in choice component: {}/{}.
Model returned object: {}, but this object is not available in the list
of selected objects.",
new Object[] { getPage().getClass(),
getPageRelativePath(), object });
// pretend like nothing is selected
return "";
}
return getChoiceRenderer().getIdValue(object, index);
}
else
{
return "";
}
}
</code>
I don't see why this changed. Release notes don't provide a task for
that. But now i have to overwrite equals in my objects to get that to work.
Is there another way of selecting the object?
Thanks
Per
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: [1.5.4] DropDownChoice is not presenting value if equals is not
overwritten
Posted by Ian Marshall <Ia...@GMail.com>.
I too received log warnings as mentioned in the newly-changed code mentioned
above. My relevant Java code extract is:
ChoiceRenderer<ListChoiceItem> crRenderer =
new ChoiceRenderer<ListChoiceItem>("sName", "nOrdinal");
RadioChoice<ListChoiceItem> rcFieldsMode =
new RadioChoice<ListChoiceItem>("rcFieldsMode", lciItems, crRenderer);
rcFieldsMode.setRequired(true);
frmForm.add(rcFieldsMode);
My ListChoiceItem class is descended from Object but did not override
equals(...) nor hashCode(). I now have done this and my warnings disappear.
Excellent for the start of the weekend!
Per Newgro wrote
>
> Thanks Sven,
>
> https://issues.apache.org/jira/browse/WICKET-4353
>
> Cheers
> Per
>
> Am 24.01.2012 11:31, schrieb Sven Meier:
>> Hi,
>>
>> Igor's commit statements says "improved inconsistency handling in
>> choice components".
>> This change prevents IChoiceRenderer#getIdValue() being called with -1
>> as the index argument.
>>
>> I assume you are using a custom IChoiceRenderer which doesn't use the
>> index but a custom identifier?
>>
>> Try overriding #getModelValue():
>>
>> @Override
>> public String getModelValue()
>> {
>> final Foo object = getModelObject();
>> if (object != null)
>> {
>> return "" + object.getBar();
>> }
>> else
>> {
>> return "";
>> }
>> }
>>
>> And create a jira issue please. We might have to revert this change.
>>
>> Sven
>>
>> Am 24.01.2012 10:52, schrieb Per Newgro:
>>> Maybe a usecase helps :-)
>>>
>>> I load my choices in a LDM. The selected choice is located in the
>>> domain model.
>>> So the objects are equal by semantic but not by instance.
>>>
>>> Dropdown choices are <d, Germany; dk, Danmark> hashcodes are 1 and
>>> 2
>>> selected value is d, Germany hashcode is 3
>>>
>>> Cheers
>>> Per
>>>
>>> Am 24.01.2012 10:42, schrieb Per Newgro:
>>>> Hi,
>>>>
>>>> with 1.5.4 the implementation of
>>>> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.java
>>>> has changed from
>>>>
>>>> <code>
>>>>
>>>> /**
>>>> * @see FormComponent#getModelValue()
>>>> */
>>>> @Override
>>>> public String getModelValue()
>>>> {
>>>> final T object = getModelObject();
>>>> if (object != null)
>>>> {
>>>> int index = getChoices().indexOf(object);
>>>> return getChoiceRenderer().getIdValue(object, index);
>>>> }
>>>> else
>>>> {
>>>> return "";
>>>> }
>>>> }
>>>>
>>>> </code>
>>>>
>>>> to
>>>>
>>>> <code>
>>>> /**
>>>> * @see FormComponent#getModelValue()
>>>> */
>>>> @Override
>>>> public String getModelValue()
>>>> {
>>>> final T object = getModelObject();
>>>> if (object != null)
>>>> {
>>>> int index = getChoices().indexOf(object);
>>>>
>>>> if (index < 0)
>>>> {
>>>> // the model is returning a choice that is not in
>>>> the available choices collection
>>>>
>>>> logger.warn(
>>>> "Detected inconsistency in choice component:
>>>> {}/{}. Model returned object: {}, but this object is not available
>>>> in the list of selected objects.",
>>>> new Object[] { getPage().getClass(),
>>>> getPageRelativePath(), object });
>>>>
>>>> // pretend like nothing is selected
>>>>
>>>> return "";
>>>> }
>>>>
>>>> return getChoiceRenderer().getIdValue(object, index);
>>>> }
>>>> else
>>>> {
>>>> return "";
>>>> }
>>>> }
>>>> </code>
>>>>
>>>> I don't see why this changed. Release notes don't provide a task for
>>>> that. But now i have to overwrite equals in my objects to get that
>>>> to work.
>>>> Is there another way of selecting the object?
>>>>
>>>> Thanks
>>>> Per
>
--
View this message in context: http://apache-wicket.1842946.n4.nabble.com/1-5-4-DropDownChoice-is-not-presenting-value-if-equals-is-not-overwritten-tp4323310p4439341.html
Sent from the Users forum mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: [1.5.4] DropDownChoice is not presenting value if equals is not
overwritten
Posted by Per Newgro <pe...@gmx.ch>.
Thanks Sven,
https://issues.apache.org/jira/browse/WICKET-4353
Cheers
Per
Am 24.01.2012 11:31, schrieb Sven Meier:
> Hi,
>
> Igor's commit statements says "improved inconsistency handling in
> choice components".
> This change prevents IChoiceRenderer#getIdValue() being called with -1
> as the index argument.
>
> I assume you are using a custom IChoiceRenderer which doesn't use the
> index but a custom identifier?
>
> Try overriding #getModelValue():
>
> @Override
> public String getModelValue()
> {
> final Foo object = getModelObject();
> if (object != null)
> {
> return "" + object.getBar();
> }
> else
> {
> return "";
> }
> }
>
> And create a jira issue please. We might have to revert this change.
>
> Sven
>
> Am 24.01.2012 10:52, schrieb Per Newgro:
>> Maybe a usecase helps :-)
>>
>> I load my choices in a LDM. The selected choice is located in the
>> domain model.
>> So the objects are equal by semantic but not by instance.
>>
>> Dropdown choices are <d, Germany; dk, Danmark> hashcodes are 1 and 2
>> selected value is d, Germany hashcode is 3
>>
>> Cheers
>> Per
>>
>> Am 24.01.2012 10:42, schrieb Per Newgro:
>>> Hi,
>>>
>>> with 1.5.4 the implementation of
>>> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.java
>>> has changed from
>>>
>>> <code>
>>>
>>> /**
>>> * @see FormComponent#getModelValue()
>>> */
>>> @Override
>>> public String getModelValue()
>>> {
>>> final T object = getModelObject();
>>> if (object != null)
>>> {
>>> int index = getChoices().indexOf(object);
>>> return getChoiceRenderer().getIdValue(object, index);
>>> }
>>> else
>>> {
>>> return "";
>>> }
>>> }
>>>
>>> </code>
>>>
>>> to
>>>
>>> <code>
>>> /**
>>> * @see FormComponent#getModelValue()
>>> */
>>> @Override
>>> public String getModelValue()
>>> {
>>> final T object = getModelObject();
>>> if (object != null)
>>> {
>>> int index = getChoices().indexOf(object);
>>>
>>> if (index < 0)
>>> {
>>> // the model is returning a choice that is not in
>>> the available choices collection
>>>
>>> logger.warn(
>>> "Detected inconsistency in choice component:
>>> {}/{}. Model returned object: {}, but this object is not available
>>> in the list of selected objects.",
>>> new Object[] { getPage().getClass(),
>>> getPageRelativePath(), object });
>>>
>>> // pretend like nothing is selected
>>>
>>> return "";
>>> }
>>>
>>> return getChoiceRenderer().getIdValue(object, index);
>>> }
>>> else
>>> {
>>> return "";
>>> }
>>> }
>>> </code>
>>>
>>> I don't see why this changed. Release notes don't provide a task for
>>> that. But now i have to overwrite equals in my objects to get that
>>> to work.
>>> Is there another way of selecting the object?
>>>
>>> Thanks
>>> Per
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>>> For additional commands, e-mail: users-help@wicket.apache.org
>>>
>>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: [1.5.4] DropDownChoice is not presenting value if equals is not
overwritten
Posted by Sven Meier <sv...@meiers.net>.
Hi,
Igor's commit statements says "improved inconsistency handling in choice
components".
This change prevents IChoiceRenderer#getIdValue() being called with -1
as the index argument.
I assume you are using a custom IChoiceRenderer which doesn't use the
index but a custom identifier?
Try overriding #getModelValue():
@Override
public String getModelValue()
{
final Foo object = getModelObject();
if (object != null)
{
return "" + object.getBar();
}
else
{
return "";
}
}
And create a jira issue please. We might have to revert this change.
Sven
Am 24.01.2012 10:52, schrieb Per Newgro:
> Maybe a usecase helps :-)
>
> I load my choices in a LDM. The selected choice is located in the
> domain model.
> So the objects are equal by semantic but not by instance.
>
> Dropdown choices are <d, Germany; dk, Danmark> hashcodes are 1 and 2
> selected value is d, Germany hashcode is 3
>
> Cheers
> Per
>
> Am 24.01.2012 10:42, schrieb Per Newgro:
>> Hi,
>>
>> with 1.5.4 the implementation of
>> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.java
>> has changed from
>>
>> <code>
>>
>> /**
>> * @see FormComponent#getModelValue()
>> */
>> @Override
>> public String getModelValue()
>> {
>> final T object = getModelObject();
>> if (object != null)
>> {
>> int index = getChoices().indexOf(object);
>> return getChoiceRenderer().getIdValue(object, index);
>> }
>> else
>> {
>> return "";
>> }
>> }
>>
>> </code>
>>
>> to
>>
>> <code>
>> /**
>> * @see FormComponent#getModelValue()
>> */
>> @Override
>> public String getModelValue()
>> {
>> final T object = getModelObject();
>> if (object != null)
>> {
>> int index = getChoices().indexOf(object);
>>
>> if (index < 0)
>> {
>> // the model is returning a choice that is not in the
>> available choices collection
>>
>> logger.warn(
>> "Detected inconsistency in choice component:
>> {}/{}. Model returned object: {}, but this object is not available in
>> the list of selected objects.",
>> new Object[] { getPage().getClass(),
>> getPageRelativePath(), object });
>>
>> // pretend like nothing is selected
>>
>> return "";
>> }
>>
>> return getChoiceRenderer().getIdValue(object, index);
>> }
>> else
>> {
>> return "";
>> }
>> }
>> </code>
>>
>> I don't see why this changed. Release notes don't provide a task for
>> that. But now i have to overwrite equals in my objects to get that to
>> work.
>> Is there another way of selecting the object?
>>
>> Thanks
>> Per
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
>> For additional commands, e-mail: users-help@wicket.apache.org
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: [1.5.4] DropDownChoice is not presenting value if equals is not
overwritten
Posted by Per Newgro <pe...@gmx.ch>.
Maybe a usecase helps :-)
I load my choices in a LDM. The selected choice is located in the domain
model.
So the objects are equal by semantic but not by instance.
Dropdown choices are <d, Germany; dk, Danmark> hashcodes are 1 and 2
selected value is d, Germany hashcode is 3
Cheers
Per
Am 24.01.2012 10:42, schrieb Per Newgro:
> Hi,
>
> with 1.5.4 the implementation of
> org.apache.wicket.markup.html.form.AbstractSingleSelectChoice.java
> has changed from
>
> <code>
>
> /**
> * @see FormComponent#getModelValue()
> */
> @Override
> public String getModelValue()
> {
> final T object = getModelObject();
> if (object != null)
> {
> int index = getChoices().indexOf(object);
> return getChoiceRenderer().getIdValue(object, index);
> }
> else
> {
> return "";
> }
> }
>
> </code>
>
> to
>
> <code>
> /**
> * @see FormComponent#getModelValue()
> */
> @Override
> public String getModelValue()
> {
> final T object = getModelObject();
> if (object != null)
> {
> int index = getChoices().indexOf(object);
>
> if (index < 0)
> {
> // the model is returning a choice that is not in the
> available choices collection
>
> logger.warn(
> "Detected inconsistency in choice component:
> {}/{}. Model returned object: {}, but this object is not available in
> the list of selected objects.",
> new Object[] { getPage().getClass(),
> getPageRelativePath(), object });
>
> // pretend like nothing is selected
>
> return "";
> }
>
> return getChoiceRenderer().getIdValue(object, index);
> }
> else
> {
> return "";
> }
> }
> </code>
>
> I don't see why this changed. Release notes don't provide a task for
> that. But now i have to overwrite equals in my objects to get that to
> work.
> Is there another way of selecting the object?
>
> Thanks
> Per
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org