Introduce valueType attribute for UISelectMany components
---------------------------------------------------------

                 Key: TOMAHAWK-1522
                 URL: https://issues.apache.org/jira/browse/TOMAHAWK-1522
             Project: MyFaces Tomahawk
          Issue Type: Improvement
    Affects Versions: 1.1.9
         Environment: Tomahawk for JSF 2.0
            Reporter: Jakob Korherr
            Assignee: Jakob Korherr


Since JSF 2.0 allows Collections as values of UISelectMany components, it 
introduced the attribute collectionType on every UISelectMany component to 
specify the type of Collection which should be used (e.g. ArrayList). The only 
problem by allowing Collections is that it is not possible in Java to get the 
value type of a type-safe Collection in contrast to arrays where this is 
possible. Thus the System needs a way to get the expected value type in order 
to get the right converter. One way (which is also implemented in MyFaces core) 
is to look at the select items to get a by-type-converter, but unfortunately 
this does not work in some scenarios.

Thus Tomahawk for JSF 2.0 introduces the valueType attribute for all its 
UISelectMany components (t:selectManyCheckbox, t:selectManyListbox, 
t:selectManyMenu and t:selectManyPicklist) to specify the expected value type. 
The valueType attribute (just like the collectionType attribute) can be a 
String representing a FQCN, a Class or a ValueExpression pointing to a String 
or a Class.

Example:

The view:

<t:selectManyCheckbox value="#{myBean.input}" valueType="java.lang.Float">
    <f:selectItem itemValue="1.2" />
    <f:selectItem itemValue="1.3" />
    <f:selectItem itemValue="1.4" />
</t:selectManyCheckbox>

The related getter in the bean myBean:

public Collection<Float> getInput()
{
        return input;
}

Without the valueType information, the component would create a Collection 
containing the selected values as _Strings_, thus leading to a 
ClassCastException when accessing them. By specifying 
valueType="java.lang.Float", the component knows that the expected value type 
of the Collection is Float and is able to obtain a by-type converter for it. 
Thus the component will create a Collection containing the selected values as 
Floats (actually the expected behavior).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to