You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@myfaces.apache.org by Matthias Wessendorf <ma...@apache.org> on 2007/06/05 14:06:21 UTC

Expression Language and primitive types

hi,

following scenario.

a (form) page renders and it has an input with #{bean.prop}, where
prop is int (not Integer).

The page renders and the value is 0 (since the variable is declared
like "private int prop;")

Now I can change it to 3. Fine. When I remove the value (not a
required=true field) I get an javax.faces.el.EvaluationException
inside the PropertyResolverImpl.setPropert(...)


        try
        {
            m.invoke(base, new Object[] {newValue});
        }
        catch (Throwable t)
        {
            log.debug("Exception while invoking setter method.",t);
            throw new EvaluationException(getMessage(base, name,
newValue, m), t);
        }


the getMessage(...) give me this string:
Bean: com.company.Bean, property: prop, newValue:  null ,newValue
class:  null  method parameter class: int

So far so good, but why not doing a isPrimitive() check on property
and set it to 0 incase of int, for instance.

-- 
Matthias Wessendorf

further stuff:
blog: http://matthiaswessendorf.wordpress.com/
mail: matzew-at-apache-dot-org

Re: Expression Language and primitive types

Posted by Mike Kienenberger <mk...@gmail.com>.
Well, I'd say because there's no guarantee that mapping 0 to null is a
good choice.
It may be that the next user wants null mapped to -1.

My suggestion in this described use case is that you use Integer
instead of int if there's a possibility that the value could be null.
 Then you can use whichever value you prefer if you receive a null
value.   You can make it a wrapper method on another bean if you
don;'t want to change the original bean.

On 6/5/07, Matthias Wessendorf <ma...@apache.org> wrote:
> hi,
>
> following scenario.
>
> a (form) page renders and it has an input with #{bean.prop}, where
> prop is int (not Integer).
>
> The page renders and the value is 0 (since the variable is declared
> like "private int prop;")
>
> Now I can change it to 3. Fine. When I remove the value (not a
> required=true field) I get an javax.faces.el.EvaluationException
> inside the PropertyResolverImpl.setPropert(...)
>
>
>         try
>         {
>             m.invoke(base, new Object[] {newValue});
>         }
>         catch (Throwable t)
>         {
>             log.debug("Exception while invoking setter method.",t);
>             throw new EvaluationException(getMessage(base, name,
> newValue, m), t);
>         }
>
>
> the getMessage(...) give me this string:
> Bean: com.company.Bean, property: prop, newValue:  null ,newValue
> class:  null  method parameter class: int
>
> So far so good, but why not doing a isPrimitive() check on property
> and set it to 0 incase of int, for instance.
>
> --
> Matthias Wessendorf
>
> further stuff:
> blog: http://matthiaswessendorf.wordpress.com/
> mail: matzew-at-apache-dot-org
>