Hi Martin,

The purpose of this conversion is that the value of the SelectItems may be a
String, but the real (already converted) value of the UISelectMany may be
something else, e.g. Float. Imagine the following scenario:

<h:selectManyCheckbox value="#{myBean.inputFloatArray}">
            <f:selectItem itemValue="1.1" />
            <f:selectItem itemValue="1.2" />
            <f:selectItem itemValue="1.3" />
</h:selectManyCheckbox>

The itemValues of all SelectItems are Strings, but the UISelectMany points
to a property which is of type Float[]. Now because of the fact that all
Strings can be converted into Floats, this scenario must work.

If you now take a look at _SelectItemsUtil.matchValue(), you can see that
not the component's value, but the value of the SelectItem is converted via
the _ValueConverter:

SelectItem item = selectItemsIter.next();
Object itemValue = item.getValue();
if(converter != null && itemValue instanceof String)
{
    itemValue = converter.getConvertedValue(context, (String)itemValue);
}

and then matched against the real value (again which is e.g. Float):

if (value==itemValue || value.equals(itemValue))
{
    return true;
}

Furthermore the converter has to be invoked with the wrapped String in a
String[], because UISelectMany.getConvertedValue() needs a submittedValue of
type String[].

Is this clear for you or should I explain it in more detail?

Regards,
Jakob

2010/8/27 Martin Koci <martin.k...@aura.cz>

> Hi,
>
>
> what is the purpose of _SelectItemsUtil._ValueConverter in
> UISelectMany.validateValue(FacesContext, Object) ?
>
> Two weird things:
>
> 1) it wraps value into new String[] { value }
> 2) it calls UISelectMany.this.getConvertedValue and it leads to
> Rendered.getConvertedValue call
>
> I don't see sence in  call of UISelectMany.this.getConvertedValue
> because this already done: we are in method validateValue here and
> conversion with Renderer.getConvertedValue is done already. This causes
> calls to Renderer.getConvertedValue during process validation which is
> unintented I think.
>
>
> Regards,
>
> Martin Kočí
>
>
>


-- 
Jakob Korherr

blog: http://www.jakobk.com
twitter: http://twitter.com/jakobkorherr
work: http://www.irian.at

Reply via email to