3 Replies Latest reply on Aug 8, 2007 9:30 AM by Pete Muir

    MethodBinding with parameter containing custom el function

    cdanielw Newbie

      I?m using Seam?s neat feature where MethodBinding can have parameters. It?s absolutely great! However, I can?t seem to get it to take custom el-function as parameters.

      E.g.:

      <h:commandLink ... action="#{myBackingBean.doSomething(foo:someFunction())}"/>

      Using the el function by itself works fine.

      I?m running Seam 1.2.1, facelets 1.1.11, a MyFaces 1.1.6 nightly and Tomcat 5.5.23. I also tried with MyFaces 1.2.0 and Tomcat 6.0.13.

      Putting a breakpoint in MethodExpressionHelper.findParamTypes():
      * With JSF 1.1, the ELContext is facelets LegacyELContext, and its EmptyFunctionMapper will obviously not find my functions.
      * With JSF 1.2, the FunctionMapper is null.

      Here is the exception being thrown in the JSF 1.1 version:
      javax.faces.el.EvaluationException: /test.xhtml @24,97 action="#{ myBackingBean. doSomething (foo:someFunction())}":
      Function ' foo:someFunction ' not found
       at com.sun.facelets.el.LegacyMethodBinding.invoke(LegacyMethodBinding.java:73)
       at org.apache.myfaces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:61)
       at javax.faces.component.UICommand.broadcast(UICommand.java:109)
      etc.

      I think the root cause of the exception has been lost somewhere on the way. My guess is that it comes from ExpressionBuilder.visit().

      Am I doing something wrong, or isn?t this supported? It would be a great feature to have!