I'm just following up on this issue as I did not see any responses from the community. Can anyone help out here?
(See attached file: JSF20EL.war) Instructions for reproducing this issue are in the previous email attached below. Thanks for your time and help, Regards, Paul Nicolucci __________________ Hello All, After The following update to the EL: https://issues.apache.org/bugzilla/show_bug.cgi?id=51177 I am having a problem when getting values from the RequestParameterMap and sending them to a method using the EL. For example: Page1 - use f:param to set some query string parameters: <h:form id="form1" prependId="false"> <h:outputScript name="jsf.js" library="javax.faces" target="head" /> <h:commandButton id="button1" value="AddMessage" action="#{elOperator.addFacesMessage}"/> <br/> <br/> <h:link id="link1" outcome="ELMethodExpression2" value="Link with Parameters"> <f:param name="param1" value="param1"/> <f:param name="param2" value="param2"/> </h:link> <h:messages/> </h:form> Navigates to Page2: Page2 - access param1,param2 from param (RequestParameterMap) and send them to a bean method as arguments: <h:form id="form1" prependId="false"> <h:outputScript name="jsf.js" library="javax.faces" target="head" /> <!-- Test method expressions while passing parameters --> <h:outputText id="out1" value="#{elOperator.generateStringWithParameters (param.param1,param.param2)}"/> </h:form> Bean Method: public String generateStringWithParameters(String param1, String param2) { return (param1 + ":" + param2); } When we try to call elOperator.generateStringWithParameters (param.param1,param.param2) I'm getting the following exception: javax.faces.FacesException: java.lang.NoSuchMethodException: com.ibm.ws.jsf.beans.ELOperatorBean.generateStringWithParameters (java.lang.Object, java.lang.Object) at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.wrap (ExceptionHandlerImpl.java:241) at org.apache.myfaces.shared_impl.context.ExceptionHandlerImpl.handle (ExceptionHandlerImpl.java:156) at org.apache.myfaces.lifecycle.LifecycleImpl.render (LifecycleImpl.java:258) at javax.faces.webapp.FacesServlet.service (FacesServlet.java:191) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:1188) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:763) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:454) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1020) at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest (CacheServletWrapper.java:87) at com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:895) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer.java:1662) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:195) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:452) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink.java:511) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest (HttpInboundLink.java:305) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete (HttpICLReadCallback.java:83) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:165) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete (ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run (ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1659) Caused by: java.lang.NoSuchMethodException: com.ibm.ws.jsf.beans.ELOperatorBean.generateStringWithParameters (java.lang.Object, java.lang.Object) at java.lang.Class.throwNoSuchMethodException(Class.java:282) at java.lang.Class.getMethod(Class.java:853) at javax.el.BeanELResolver.invoke(BeanELResolver.java:406) at javax.el.CompositeELResolver.invoke (CompositeELResolver.java:137) at org.apache.el.parser.AstValue.getValue(AstValue.java:159) at org.apache.el.ValueExpressionImpl.getValue (ValueExpressionImpl.java:283) at org.apache.myfaces.view.facelets.el.TagValueExpression.getValue (TagValueExpression.java:85) at javax.faces.component._DeltaStateHelper.eval (_DeltaStateHelper.java:243) at javax.faces.component.UIOutput.getValue(UIOutput.java:71) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getValue (RendererUtils.java:343) at org.apache.myfaces.shared_impl.renderkit.RendererUtils.getStringValue (RendererUtils.java:295) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.renderOutput (HtmlTextRendererBase.java:92) at org.apache.myfaces.shared_impl.renderkit.html.HtmlTextRendererBase.encodeEnd (HtmlTextRendererBase.java:79) at javax.faces.component.UIComponentBase.encodeEnd (UIComponentBase.java:519) at javax.faces.component.UIComponent.encodeAll (UIComponent.java:626) at javax.faces.component.UIComponent.encodeAll (UIComponent.java:622) at javax.faces.component.UIComponent.encodeAll (UIComponent.java:622) at javax.faces.component.UIComponent.encodeAll (UIComponent.java:622) at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView (FaceletViewDeclarationLanguage.java:1320) at org.apache.myfaces.application.ViewHandlerImpl.renderView (ViewHandlerImpl.java:263) at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute (RenderResponseExecutor.java:85) at org.apache.myfaces.lifecycle.LifecycleImpl.render (LifecycleImpl.java:239) ... 22 more Since the MapELResolver.java in the EL Implementation always returns "Object.class" from getType() and the parameters are stored in the RequestParameterMap we are now looking for a method signature using Object instead of the expected type String. This worked before the change in the above mentioned bug, we had the same JSF application and we were calling the correct method signature method(String param1, String param2), because before the change, the MapELResolver.getType( ) would return the type of a the value in the Map rather than Object.class Has an issue already been opened for this? Suggestions on how to go about fixing this? I've attached a simpleJSF test case that reproduces -> Navigate to the ELMethodExpression.jsf page and then press the link -> the exception appears. I've debugged through the EL code and It looks as though the type of the parameters comes from the MapELResolver (will always return Object.class), so that then when we reach "javax.el.BeanELResolver.invoke()" we can't find the method due to the fact we are looking for method(Object param1, Object param2), rather than method (String param1, String param2). Thanks for the help! Regards, Paul Nicolucci
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org