You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@myfaces.apache.org by gazlm <ga...@yahoo.co.uk> on 2007/05/31 15:32:03 UTC

argument type mismatch when setting property with updateActionListener

I have a problem with type conversions when using updateActionListener to set
an int property in a backing bean...

I'm using a bean which has properties pageNum and numPages, and I have
command links that refresh the page, with an updateActionListener changing
the value of the pageNum property.

If I use the updateActionListener like this:

<t:updateActionListener property="#{bean.pageNum}" value="0" />

then I have no problems, but if I try to do something like this:

<t:updateActionListener property="#{bean.pageNum}" value="#{bean.pageNum+1}"
/>

then I get an exception:

javax.faces.el.EvaluationException: Exception setting property helloCount of
base with class demo.GetNameBean, caused by an argument type mismatch. The
full stack trace is attached below.

>From debugging through the code while running, it seems that when I do any
arithmetic in a JSF EL expression, the result is a Long, which can't be used
as an argument when the required type is int.

If I change my bean to accept a Long instead of an int, the problem goes
away, but that doesn't seem ideal to me...

Does anyone else have this problem?
Is it expected behaviour for an EL arithmetic expression to always return a
Long?

Cheers.

ERROR [[/testMyFaces].[Faces Servlet]:http-8080-Processor25] -
Servlet.service() for servlet Faces Servlet threw exception
javax.faces.el.EvaluationException: Exception setting property pageNum of
base with class com.gaz.Bean
	at
org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:185)
	at
org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
	at
org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:156)
	at javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
	at
javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
	at javax.faces.component.UICommand.broadcast(UICommand.java:75)
	at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
	at
org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
	at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
	at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
	at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
	at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
	at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
	at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
	at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
	at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
	at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
	at
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
	at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
	at
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
	at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
	at java.lang.Thread.run(Thread.java:595)
Caused by: javax.faces.el.EvaluationException: Bean: com.gaz.Bean, property:
pageNum
	at
org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:410)
	at
org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
	... 27 more
Caused by: java.lang.IllegalArgumentException: argument type mismatch
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:585)
	at
org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
	... 28 more

-- 
View this message in context: http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894017
Sent from the MyFaces - Users mailing list archive at Nabble.com.


Re: argument type mismatch when setting property with updateActionListener

Posted by gazlm <ga...@yahoo.co.uk>.
Hmmm, sounds like conversion may be a little overcomplicated for me right
now...

I'm not using Facelets at the mo, I'm going to try them out after I've got
to grips with JSF, so I think I'll just take the easy option and change the
bean API to use Number.

Thanks again.


Mike Kienenberger wrote:
> 
> Well, the problem is that javax.faces.Integer converts a string to an
> integer.
> You'd need to convert a Long to an integer.
> 
> I haven't actually used a converter on updateActionListener, but I'd
> think a Long to Integer converter should work.
> 
> If you're using facelets, you can write your own functions for doing
> conversion:
> 
> #{myFunctions:convertLongToInt(yourvalue)}
> 
> Realistically, since JSF generates Doubles and Longs, your best bet is
> to make your accessor be of type Number and then convert it in your
> bean code if you want it to be of a particular format.
> 
> Thus, when you have control over the bean api, make your type Number.
> 
> For those cases where  you don't,  you could put a wrapper accessor on
> your bean, either via subclassing or delegating.
> 
> public Number getPageNumber() { return new Integer(getPageNum()); }
> public void setPageNumber(Number number) { setPageNum(number.intValue());
> }
> 
> 
> On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
>>
>> Cheers, Mike, that eases my confusion a little. I thought I might have
>> been
>> doing something wrong...
>>
>> Is it possible to convert the EL return value to the right type? The
>> updateActionListener docs state "An optional Converter may be associated
>> with this listener, and if present will be invoked to convert the value
>> to
>> the datatype expected by the target property."
>>
>> I tried using converter="javax.faces.Integer" to force the conversion to
>> an
>> int, but this got me nowhere at all.
>>
>> I'm pretty new to JSF, and I have the feeling I'm barking up the wrong
>> tree
>> - any help appreciated.
>>
>> Cheers,
>>
>>
>> Mike Kienenberger wrote:
>> >
>> >> Is it expected behaviour for an EL arithmetic expression to always
>> return
>> >> a
>> >> Long?
>> >
>> > Yes.  Or a Double if the value cannot be represented as a Long.
>> >
>> >
>> >
>> > On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
>> >>
>> >> I have a problem with type conversions when using updateActionListener
>> to
>> >> set
>> >> an int property in a backing bean...
>> >>
>> >> I'm using a bean which has properties pageNum and numPages, and I have
>> >> command links that refresh the page, with an updateActionListener
>> >> changing
>> >> the value of the pageNum property.
>> >>
>> >> If I use the updateActionListener like this:
>> >>
>> >> <t:updateActionListener property="#{bean.pageNum}" value="0" />
>> >>
>> >> then I have no problems, but if I try to do something like this:
>> >>
>> >> <t:updateActionListener property="#{bean.pageNum}"
>> >> value="#{bean.pageNum+1}"
>> >> />
>> >>
>> >> then I get an exception:
>> >>
>> >> javax.faces.el.EvaluationException: Exception setting property
>> helloCount
>> >> of
>> >> base with class demo.GetNameBean, caused by an argument type mismatch.
>> >> The
>> >> full stack trace is attached below.
>> >>
>> >> From debugging through the code while running, it seems that when I do
>> >> any
>> >> arithmetic in a JSF EL expression, the result is a Long, which can't
>> be
>> >> used
>> >> as an argument when the required type is int.
>> >>
>> >> If I change my bean to accept a Long instead of an int, the problem
>> goes
>> >> away, but that doesn't seem ideal to me...
>> >>
>> >> Does anyone else have this problem?
>> >> Is it expected behaviour for an EL arithmetic expression to always
>> return
>> >> a
>> >> Long?
>> >>
>> >> Cheers.
>> >>
>> >> ERROR [[/testMyFaces].[Faces Servlet]:http-8080-Processor25] -
>> >> Servlet.service() for servlet Faces Servlet threw exception
>> >> javax.faces.el.EvaluationException: Exception setting property pageNum
>> of
>> >> base with class com.gaz.Bean
>> >>         at
>> >>
>> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:185)
>> >>         at
>> >>
>> org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
>> >>         at
>> >>
>> org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:156)
>> >>         at
>> >> javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
>> >>         at
>> >>
>> javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
>> >>         at
>> javax.faces.component.UICommand.broadcast(UICommand.java:75)
>> >>         at
>> >>
>> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
>> >>         at
>> >>
>> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
>> >>         at
>> >>
>> org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
>> >>         at
>> >>
>> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
>> >>         at
>> javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
>> >>         at
>> >>
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>> >>         at
>> >>
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>> >>         at
>> >>
>> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
>> >>         at
>> >>
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>> >>         at
>> >>
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>> >>         at
>> >>
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>> >>         at
>> >>
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>> >>         at
>> >>
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>> >>         at
>> >>
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>> >>         at
>> >>
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>> >>         at
>> >>
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>> >>         at
>> >>
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>> >>         at
>> >>
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
>> >>         at
>> >>
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>> >>         at
>> >>
>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>> >>         at
>> >>
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>> >>         at java.lang.Thread.run(Thread.java:595)
>> >> Caused by: javax.faces.el.EvaluationException: Bean: com.gaz.Bean,
>> >> property:
>> >> pageNum
>> >>         at
>> >>
>> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:410)
>> >>         at
>> >>
>> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
>> >>         ... 27 more
>> >> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>> >>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>> >>         at
>> >>
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>> >>         at
>> >>
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>> >>         at java.lang.reflect.Method.invoke(Method.java:585)
>> >>         at
>> >>
>> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
>> >>         ... 28 more
>> >>
>> >> --
>> >> View this message in context:
>> >>
>> http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894017
>> >> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>> >>
>> >>
>> >
>> >
>>
>> --
>> View this message in context:
>> http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894284
>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10896824
Sent from the MyFaces - Users mailing list archive at Nabble.com.


Re: argument type mismatch when setting property with updateActionListener

Posted by Mike Kienenberger <mk...@gmail.com>.
Well, the problem is that javax.faces.Integer converts a string to an integer.
You'd need to convert a Long to an integer.

I haven't actually used a converter on updateActionListener, but I'd
think a Long to Integer converter should work.

If you're using facelets, you can write your own functions for doing conversion:

#{myFunctions:convertLongToInt(yourvalue)}

Realistically, since JSF generates Doubles and Longs, your best bet is
to make your accessor be of type Number and then convert it in your
bean code if you want it to be of a particular format.

Thus, when you have control over the bean api, make your type Number.

For those cases where  you don't,  you could put a wrapper accessor on
your bean, either via subclassing or delegating.

public Number getPageNumber() { return new Integer(getPageNum()); }
public void setPageNumber(Number number) { setPageNum(number.intValue()); }


On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
>
> Cheers, Mike, that eases my confusion a little. I thought I might have been
> doing something wrong...
>
> Is it possible to convert the EL return value to the right type? The
> updateActionListener docs state "An optional Converter may be associated
> with this listener, and if present will be invoked to convert the value to
> the datatype expected by the target property."
>
> I tried using converter="javax.faces.Integer" to force the conversion to an
> int, but this got me nowhere at all.
>
> I'm pretty new to JSF, and I have the feeling I'm barking up the wrong tree
> - any help appreciated.
>
> Cheers,
>
>
> Mike Kienenberger wrote:
> >
> >> Is it expected behaviour for an EL arithmetic expression to always return
> >> a
> >> Long?
> >
> > Yes.  Or a Double if the value cannot be represented as a Long.
> >
> >
> >
> > On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
> >>
> >> I have a problem with type conversions when using updateActionListener to
> >> set
> >> an int property in a backing bean...
> >>
> >> I'm using a bean which has properties pageNum and numPages, and I have
> >> command links that refresh the page, with an updateActionListener
> >> changing
> >> the value of the pageNum property.
> >>
> >> If I use the updateActionListener like this:
> >>
> >> <t:updateActionListener property="#{bean.pageNum}" value="0" />
> >>
> >> then I have no problems, but if I try to do something like this:
> >>
> >> <t:updateActionListener property="#{bean.pageNum}"
> >> value="#{bean.pageNum+1}"
> >> />
> >>
> >> then I get an exception:
> >>
> >> javax.faces.el.EvaluationException: Exception setting property helloCount
> >> of
> >> base with class demo.GetNameBean, caused by an argument type mismatch.
> >> The
> >> full stack trace is attached below.
> >>
> >> From debugging through the code while running, it seems that when I do
> >> any
> >> arithmetic in a JSF EL expression, the result is a Long, which can't be
> >> used
> >> as an argument when the required type is int.
> >>
> >> If I change my bean to accept a Long instead of an int, the problem goes
> >> away, but that doesn't seem ideal to me...
> >>
> >> Does anyone else have this problem?
> >> Is it expected behaviour for an EL arithmetic expression to always return
> >> a
> >> Long?
> >>
> >> Cheers.
> >>
> >> ERROR [[/testMyFaces].[Faces Servlet]:http-8080-Processor25] -
> >> Servlet.service() for servlet Faces Servlet threw exception
> >> javax.faces.el.EvaluationException: Exception setting property pageNum of
> >> base with class com.gaz.Bean
> >>         at
> >> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:185)
> >>         at
> >> org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
> >>         at
> >> org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:156)
> >>         at
> >> javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
> >>         at
> >> javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
> >>         at javax.faces.component.UICommand.broadcast(UICommand.java:75)
> >>         at
> >> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
> >>         at
> >> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
> >>         at
> >> org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
> >>         at
> >> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
> >>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
> >>         at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
> >>         at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> >>         at
> >> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
> >>         at
> >> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
> >>         at
> >> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
> >>         at
> >> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
> >>         at
> >> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
> >>         at
> >> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
> >>         at
> >> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
> >>         at
> >> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
> >>         at
> >> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
> >>         at
> >> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
> >>         at
> >> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
> >>         at
> >> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
> >>         at
> >> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
> >>         at
> >> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
> >>         at java.lang.Thread.run(Thread.java:595)
> >> Caused by: javax.faces.el.EvaluationException: Bean: com.gaz.Bean,
> >> property:
> >> pageNum
> >>         at
> >> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:410)
> >>         at
> >> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
> >>         ... 27 more
> >> Caused by: java.lang.IllegalArgumentException: argument type mismatch
> >>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>         at
> >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>         at
> >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>         at java.lang.reflect.Method.invoke(Method.java:585)
> >>         at
> >> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
> >>         ... 28 more
> >>
> >> --
> >> View this message in context:
> >> http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894017
> >> Sent from the MyFaces - Users mailing list archive at Nabble.com.
> >>
> >>
> >
> >
>
> --
> View this message in context: http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894284
> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>
>

Re: argument type mismatch when setting property with updateActionListener

Posted by gazlm <ga...@yahoo.co.uk>.
Cheers, Mike, that eases my confusion a little. I thought I might have been
doing something wrong...

Is it possible to convert the EL return value to the right type? The
updateActionListener docs state "An optional Converter may be associated
with this listener, and if present will be invoked to convert the value to
the datatype expected by the target property."

I tried using converter="javax.faces.Integer" to force the conversion to an
int, but this got me nowhere at all.

I'm pretty new to JSF, and I have the feeling I'm barking up the wrong tree
- any help appreciated.

Cheers,


Mike Kienenberger wrote:
> 
>> Is it expected behaviour for an EL arithmetic expression to always return
>> a
>> Long?
> 
> Yes.  Or a Double if the value cannot be represented as a Long.
> 
> 
> 
> On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
>>
>> I have a problem with type conversions when using updateActionListener to
>> set
>> an int property in a backing bean...
>>
>> I'm using a bean which has properties pageNum and numPages, and I have
>> command links that refresh the page, with an updateActionListener
>> changing
>> the value of the pageNum property.
>>
>> If I use the updateActionListener like this:
>>
>> <t:updateActionListener property="#{bean.pageNum}" value="0" />
>>
>> then I have no problems, but if I try to do something like this:
>>
>> <t:updateActionListener property="#{bean.pageNum}"
>> value="#{bean.pageNum+1}"
>> />
>>
>> then I get an exception:
>>
>> javax.faces.el.EvaluationException: Exception setting property helloCount
>> of
>> base with class demo.GetNameBean, caused by an argument type mismatch.
>> The
>> full stack trace is attached below.
>>
>> From debugging through the code while running, it seems that when I do
>> any
>> arithmetic in a JSF EL expression, the result is a Long, which can't be
>> used
>> as an argument when the required type is int.
>>
>> If I change my bean to accept a Long instead of an int, the problem goes
>> away, but that doesn't seem ideal to me...
>>
>> Does anyone else have this problem?
>> Is it expected behaviour for an EL arithmetic expression to always return
>> a
>> Long?
>>
>> Cheers.
>>
>> ERROR [[/testMyFaces].[Faces Servlet]:http-8080-Processor25] -
>> Servlet.service() for servlet Faces Servlet threw exception
>> javax.faces.el.EvaluationException: Exception setting property pageNum of
>> base with class com.gaz.Bean
>>         at
>> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:185)
>>         at
>> org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
>>         at
>> org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:156)
>>         at
>> javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
>>         at
>> javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
>>         at javax.faces.component.UICommand.broadcast(UICommand.java:75)
>>         at
>> javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
>>         at
>> javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
>>         at
>> org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
>>         at
>> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
>>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>>         at
>> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>>         at
>> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>>         at
>> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>>         at
>> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>>         at
>> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>>         at
>> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>>         at
>> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>>         at
>> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>>         at
>> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>>         at
>> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
>>         at
>> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>>         at
>> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>>         at
>> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>>         at java.lang.Thread.run(Thread.java:595)
>> Caused by: javax.faces.el.EvaluationException: Bean: com.gaz.Bean,
>> property:
>> pageNum
>>         at
>> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:410)
>>         at
>> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
>>         ... 27 more
>> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>         at
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>         at
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>>         at java.lang.reflect.Method.invoke(Method.java:585)
>>         at
>> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
>>         ... 28 more
>>
>> --
>> View this message in context:
>> http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894017
>> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>>
>>
> 
> 

-- 
View this message in context: http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894284
Sent from the MyFaces - Users mailing list archive at Nabble.com.


Re: argument type mismatch when setting property with updateActionListener

Posted by Mike Kienenberger <mk...@gmail.com>.
> Is it expected behaviour for an EL arithmetic expression to always return a
> Long?

Yes.  Or a Double if the value cannot be represented as a Long.



On 5/31/07, gazlm <ga...@yahoo.co.uk> wrote:
>
> I have a problem with type conversions when using updateActionListener to set
> an int property in a backing bean...
>
> I'm using a bean which has properties pageNum and numPages, and I have
> command links that refresh the page, with an updateActionListener changing
> the value of the pageNum property.
>
> If I use the updateActionListener like this:
>
> <t:updateActionListener property="#{bean.pageNum}" value="0" />
>
> then I have no problems, but if I try to do something like this:
>
> <t:updateActionListener property="#{bean.pageNum}" value="#{bean.pageNum+1}"
> />
>
> then I get an exception:
>
> javax.faces.el.EvaluationException: Exception setting property helloCount of
> base with class demo.GetNameBean, caused by an argument type mismatch. The
> full stack trace is attached below.
>
> From debugging through the code while running, it seems that when I do any
> arithmetic in a JSF EL expression, the result is a Long, which can't be used
> as an argument when the required type is int.
>
> If I change my bean to accept a Long instead of an int, the problem goes
> away, but that doesn't seem ideal to me...
>
> Does anyone else have this problem?
> Is it expected behaviour for an EL arithmetic expression to always return a
> Long?
>
> Cheers.
>
> ERROR [[/testMyFaces].[Faces Servlet]:http-8080-Processor25] -
> Servlet.service() for servlet Faces Servlet threw exception
> javax.faces.el.EvaluationException: Exception setting property pageNum of
> base with class com.gaz.Bean
>         at
> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:185)
>         at
> org.apache.myfaces.el.ValueBindingImpl.setValue(ValueBindingImpl.java:275)
>         at
> org.apache.myfaces.custom.updateactionlistener.UpdateActionListener.processAction(UpdateActionListener.java:156)
>         at javax.faces.event.ActionEvent.processListener(ActionEvent.java:48)
>         at
> javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:484)
>         at javax.faces.component.UICommand.broadcast(UICommand.java:75)
>         at javax.faces.component.UIViewRoot._broadcastForPhase(UIViewRoot.java:94)
>         at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:168)
>         at
> org.apache.myfaces.lifecycle.LifecycleImpl.invokeApplication(LifecycleImpl.java:343)
>         at
> org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:86)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:137)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>         at
> org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>         at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>         at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>         at
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
>         at
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>         at
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>         at
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>         at java.lang.Thread.run(Thread.java:595)
> Caused by: javax.faces.el.EvaluationException: Bean: com.gaz.Bean, property:
> pageNum
>         at
> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:410)
>         at
> org.apache.myfaces.el.PropertyResolverImpl.setValue(PropertyResolverImpl.java:173)
>         ... 27 more
> Caused by: java.lang.IllegalArgumentException: argument type mismatch
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:585)
>         at
> org.apache.myfaces.el.PropertyResolverImpl.setProperty(PropertyResolverImpl.java:406)
>         ... 28 more
>
> --
> View this message in context: http://www.nabble.com/argument-type-mismatch-when-setting-property-with-updateActionListener-tf3846565.html#a10894017
> Sent from the MyFaces - Users mailing list archive at Nabble.com.
>
>