Hello All,

I have tested MyFaces-2552 and everything seems to work correctly with
Composite Components in my testing however, I have an issue that I have
some concern about and wanted to get some feedback.

After The following update to the EL:
https://issues.apache.org/bugzilla/show_bug.cgi?id=51177   (which is the
main reason for the fix in MyFaces-2552), I am having an issue using
<f:param/>.  For example:

Page1:

    <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:

    <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.

Has an issue already been opened for this?  Suggestions on how to go about
fixing this?  I've attached a simple test case that reproduces -> Navigate
to the ELMethodExpression.jsf page and then press the link -> the exception
appears.

Thanks for the help!

(See attached file: JSF20EL.war)

Regards,

Paul Nicolucci

Attachment: JSF20EL.war
Description: Binary data

Reply via email to