Class ContextualCompositeMethodExpression

java.lang.Object
jakarta.el.Expression
jakarta.el.MethodExpression
com.sun.faces.facelets.el.ContextualCompositeMethodExpression
All Implemented Interfaces:
Serializable

public class ContextualCompositeMethodExpression extends jakarta.el.MethodExpression

This specialized MethodExpression enables the evaluation of composite component expressions. Instances of this expression will be created when TagAttributeImpl.getValueExpression(jakarta.faces.view.facelets.FaceletContext, Class) is invoked and the expression represents a composite component expression (i.e. #{cc.[properties]}).

It's important to note that these MethodExpressions are context sensitive in that they leverage the location in which they were referenced in order to push the proper composite component to the evaluation context prior to evaluating the expression itself.

Here's an example:
 Using Page test.xhtml
 ---------------------------------
    <ez:comp1 do="#{bean.action}" />


 comp1.xhtml
 ---------------------------------
 <composite:interface>
    <composite:attribute name="do" method-signature="String f()" required="true" />
 </composite:interface>
 <composite:implementation>
    <ez:nesting>
       <h:commandButton value="Click Me!" action="#{cc.attrs.do} />
    </ez:nesting>
 </composite:implementation>

 nesting.xhtml
 ---------------------------------
 <composite:interface />
 <composite:implementation>
    <composite:insertChildren>
 </composite:implementation>
 
When commandButton is clicked, the ContextualCompositeMethodExpression first is looked up by TagAttributeImpl.AttributeLookupMethodExpression which results an instance of ContextualCompositeMethodExpression. When this ContextualCompositeMethodExpression is invoked, the Location object necessary to find the proper composite component will be derived from source ValueExpression provided at construction time. Using the derived Location, we can find the composite component that matches 'owns' the template in which the expression was defined in by comparing the path of the Location with the name and library of the Resource instance associated with each composite component. If a matching composite component is found, it will be made available to the EL by calling CompositeComponentStackManager.push(jakarta.faces.component.UIComponent).
See Also:
  • Constructor Details

    • ContextualCompositeMethodExpression

      public ContextualCompositeMethodExpression(jakarta.el.ValueExpression source, jakarta.el.MethodExpression delegate)
    • ContextualCompositeMethodExpression

      public ContextualCompositeMethodExpression(Location location, jakarta.el.MethodExpression delegate)
  • Method Details

    • getMethodInfo

      public jakarta.el.MethodInfo getMethodInfo(jakarta.el.ELContext elContext)
      Specified by:
      getMethodInfo in class jakarta.el.MethodExpression
    • invoke

      public Object invoke(jakarta.el.ELContext elContext, Object[] objects)
      Specified by:
      invoke in class jakarta.el.MethodExpression
    • getExpressionString

      public String getExpressionString()
      Specified by:
      getExpressionString in class jakarta.el.Expression
    • equals

      public boolean equals(Object o)
      Specified by:
      equals in class jakarta.el.Expression
    • hashCode

      public int hashCode()
      Specified by:
      hashCode in class jakarta.el.Expression
    • isLiteralText

      public boolean isLiteralText()
      Specified by:
      isLiteralText in class jakarta.el.Expression