Top Description Inners Fields Constructors Methods
com.sun.faces.facelets.el

public Class ContextualCompositeMethodExpression

extends MethodExpression
Class Inheritance
Imports
com.sun.faces.component.CompositeComponentStackManager, com.sun.faces.util.FacesLogger, java.util.logging.Level, .Logger, javax.el.MethodExpression, .ValueExpression, .MethodInfo, .ELContext, .ELException, .MethodNotFoundException, javax.faces.component.UIComponent, javax.faces.context.FacesContext, javax.faces.event.AbortProcessingException, .ComponentSystemEvent, .ComponentSystemEventListener, .PostAddToViewEvent, javax.faces.validator.ValidatorException, javax.faces.view.Location

This specialized MethodExpression enables the evaluation of composite component expressions. Instances of this expression will be created when com.sun.faces.facelets.tag.TagAttributeImpl#getValueExpression(javax.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 com.sun.faces.facelets.tag.TagAttributeImpl.AttributeLookupMethodExpression which results an instance of ContextualCompositeMethodExpression. When this ContextualCompositeMethodExpression is invoked, the javax.faces.view.Location object necessary to find the proper composite component will be derived from source ValueExpression provided at construction time. Using the derived javax.faces.view.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 javax.faces.application.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(javax.faces.component.UIComponent).

Nested and Inner Type Summary

Modifier and TypeClass and Description
private class

Field Summary

Modifier and TypeField and Description
private String
private final MethodExpression
private final Location
private static final Logger
private static final long
private final ValueExpression

Constructor Summary

AccessConstructor and Description
public
public

Method Summary

Modifier and TypeMethod and Description
public boolean
equals(Object
the Object to test for equality.
o
)

Implements abstract javax.el.Expression.equals.

Determines whether the specified object is equal to this Expression.
public String
getExpressionString()

Implements abstract javax.el.Expression.getExpressionString.

Returns the original String used to create this Expression, unmodified.
public MethodInfo
getMethodInfo(ELContext
The context of this evaluation
elContext
)

Implements abstract javax.el.MethodExpression.getMethodInfo.

Evaluates the expression relative to the provided context, and returns information about the actual referenced method.
public int
hashCode()

Implements abstract javax.el.Expression.hashCode.

Returns the hash code for this Expression.
public Object
invoke(ELContext
The context of this evaluation.
elContext
,
Object[]
The parameters to pass to the method, or null if no parameters.
objects
)

Implements abstract javax.el.MethodExpression.invoke.

If a String literal is specified as the expression, returns the String literal coerced to the expected return type of the method signature.
public boolean
isLiteralText()

Implements abstract javax.el.Expression.isLiteralText.

Returns whether this expression was created from only literal text.
private void
private boolean
Inherited from javax.el.MethodExpression:
isParametersProvidedisParmetersProvided

Field Detail

ccClientIdback to summary
private String ccClientId
delegateback to summary
private final MethodExpression delegate
locationback to summary
private final Location location
LOGGERback to summary
private static final Logger LOGGER
serialVersionUIDback to summary
private static final long serialVersionUID
sourceback to summary
private final ValueExpression source

Constructor Detail

ContextualCompositeMethodExpressionback to summary
public ContextualCompositeMethodExpression(ValueExpression source, MethodExpression delegate)
ContextualCompositeMethodExpressionback to summary
public ContextualCompositeMethodExpression(Location location, MethodExpression delegate)

Method Detail

equalsback to summary
public boolean equals(Object o)

Implements abstract javax.el.Expression.equals.

Doc from javax.el.Expression.equals.

Determines whether the specified object is equal to this Expression.

The result is true if and only if the argument is not null, is an Expression object that is the of the same type (ValueExpression or MethodExpression), and has an identical parsed representation.

Note that two expressions can be equal if their expression Strings are different. For example, ${fn1:foo()} and ${fn2:foo()} are equal if their corresponding FunctionMappers mapped fn1:foo and fn2:foo to the same method.

Parameters
o:Object

the Object to test for equality.

Returns:boolean

true if obj equals this Expression; false otherwise.

Annotations
@SuppressWarnings:EqualsWhichDoesntCheckParameterClass
@Override
getExpressionStringback to summary
public String getExpressionString()

Implements abstract javax.el.Expression.getExpressionString.

Doc from javax.el.Expression.getExpressionString.

Returns the original String used to create this Expression, unmodified.

This is used for debugging purposes but also for the purposes of comparison (e.g. to ensure the expression in a configuration file has not changed).

This method does not provide sufficient information to re-create an expression. Two different expressions can have exactly the same expression string but different function mappings. Serialization should be used to save and restore the state of an Expression.

Returns:String

The original expression String.

Annotations
@Override
getMethodInfoback to summary
public MethodInfo getMethodInfo(ELContext elContext)

Implements abstract javax.el.MethodExpression.getMethodInfo.

Doc from javax.el.MethodExpression.getMethodInfo.

Evaluates the expression relative to the provided context, and returns information about the actual referenced method.

Parameters
elContext:ELContext

The context of this evaluation

Returns:MethodInfo

an instance of MethodInfo containing information about the method the expression evaluated to.

Annotations
@Override
hashCodeback to summary
public int hashCode()

Implements abstract javax.el.Expression.hashCode.

Doc from javax.el.Expression.hashCode.

Returns the hash code for this Expression.

See the note in the equals method on how two expressions can be equal if their expression Strings are different. Recall that if two objects are equal according to the equals(Object) method, then calling the hashCode method on each of the two objects must produce the same integer result. Implementations must take special note and implement hashCode correctly.

Returns:int

The hash code for this Expression.

Annotations
@Override
invokeback to summary
public Object invoke(ELContext elContext, Object[] objects)

Implements abstract javax.el.MethodExpression.invoke.

Doc from javax.el.MethodExpression.invoke.

If a String literal is specified as the expression, returns the String literal coerced to the expected return type of the method signature. An ELException is thrown if expectedReturnType is void or if the coercion of the String literal to the expectedReturnType yields an error (see Section "1.18 Type Conversion" of the EL specification). If not a String literal, evaluates the expression relative to the provided context, invokes the method that was found using the supplied parameters, and returns the result of the method invocation. Any parameters passed to this method is ignored if isLiteralText() or isParmetersProvided() is true.

Parameters
elContext:ELContext

The context of this evaluation.

objects:Object[]

The parameters to pass to the method, or null if no parameters.

Returns:Object

the result of the method invocation (null if the method has a void return type).

Annotations
@Override
isLiteralTextback to summary
public boolean isLiteralText()

Implements abstract javax.el.Expression.isLiteralText.

Doc from javax.el.Expression.isLiteralText.

Returns whether this expression was created from only literal text.

This method must return true if and only if the expression string this expression was created from contained no unescaped EL delimeters (${...} or #{...}).

Returns:boolean

true if this expression was created from only literal text; false otherwise.

Annotations
@Override
popCompositeComponentback to summary
private void popCompositeComponent(FacesContext ctx)
pushCompositeComponentback to summary
private boolean pushCompositeComponent(FacesContext ctx)
com.sun.faces.facelets.el back to summary

private Class ContextualCompositeMethodExpression.SetClientIdListener

extends Object
implements ComponentSystemEventListener
Class Inheritance
  • java.lang.Object
  • com.sun.faces.facelets.el.ContextualCompositeMethodExpression.SetClientIdListener
All Implemented Interfaces
javax.faces.event.ComponentSystemEventListener, javax.faces.event.FacesListener, java.util.EventListener

Field Summary

Modifier and TypeField and Description
private ContextualCompositeMethodExpression

Constructor Summary

AccessConstructor and Description
public
public

Method Summary

Modifier and TypeMethod and Description
public void
processEvent(ComponentSystemEvent
the ComponentSystemEvent instance that is being processed.
event
)

Implements javax.faces.event.ComponentSystemEventListener.processEvent.

When called, the listener can assume that any guarantees given in the javadoc for the specific SystemEvent subclass are true.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Constructor Detail

SetClientIdListenerback to summary
public SetClientIdListener()
SetClientIdListenerback to summary
public SetClientIdListener(ContextualCompositeMethodExpression ccME)

Method Detail

processEventback to summary
public void processEvent(ComponentSystemEvent event) throws AbortProcessingException

Implements javax.faces.event.ComponentSystemEventListener.processEvent.

Doc from javax.faces.event.ComponentSystemEventListener.processEvent.

When called, the listener can assume that any guarantees given in the javadoc for the specific SystemEvent subclass are true.

Parameters
event:ComponentSystemEvent

the ComponentSystemEvent instance that is being processed.

Annotations
@Override
Exceptions
AbortProcessingException:
if lifecycle processing should cease for this request.