Enables customization of variable and property resolution behavior for EL
expression evaluation.
While evaluating an expression, the ELResolver associated
with the ELContext is consulted to do the initial resolution of
the first variable of an expression. It is also consulted when a
. or [] operator is encountered, except for the
last such operator in a method expression, in which case the resultion
rules are hard coded.
For example, in the EL expression ${employee.lastName},
the ELResolver determines what object employee
refers to, and what it means to get the lastName property on
that object.
Most methods in this class accept a base
and property parameter. In the case of variable resolution
(e.g. determining what employee refers to in
${employee.lastName}), the base parameter will
be null and the property parameter will always
be of type String. In this case, if the property
is not a String, the behavior of the ELResolver
is undefined.
In the case of property resolution, the base parameter
identifies the base object and the property object identifies
the property on that base. For example, in the expression
${employee.lastName}, base is the result of the
variable resolution for employee and property
is the string "lastName". In the expression
${y[x]}, base is the result of the variable
resolution for y and property is the result of
the variable resolution for x.
Though only a single ELResolver is associated with an
ELContext, there are usually multiple resolvers considered
for any given variable or property resolution. ELResolvers
are combined together using CompositeELResolver s, to define
rich semantics for evaluating an expression.
For the getValue(ELContext, Object, Object) , getType(ELContext, Object, Object) , setValue(ELContext, Object, Object, Object) and
isReadOnly(ELContext, Object, Object) methods, an ELResolver is not
responsible for resolving all possible (base, property) pairs. In fact,
most resolvers will only handle a base of a single type.
To indicate that a resolver has successfully resolved a particular
(base, property) pair, it must set the propertyResolved
property of the ELContext to true. If it could
not handle the given pair, it must leave this property alone. The caller
must ignore the return value of the method if propertyResolved
is false.
While evaluating an expression, the
ELResolverassociated with the ELContext is consulted to do the initial resolution of the first variable of an expression. It is also consulted when a.or[]operator is encountered, except for the last such operator in a method expression, in which case the resultion rules are hard coded.For example, in the EL expression
${employee.lastName}, theELResolverdetermines what objectemployeerefers to, and what it means to get thelastNameproperty on that object.Most methods in this class accept a
baseandpropertyparameter. In the case of variable resolution (e.g. determining whatemployeerefers to in${employee.lastName}), thebaseparameter will benulland thepropertyparameter will always be of typeString. In this case, if thepropertyis not aString, the behavior of theELResolveris undefined.In the case of property resolution, the
baseparameter identifies the base object and thepropertyobject identifies the property on that base. For example, in the expression${employee.lastName},baseis the result of the variable resolution foremployeeandpropertyis the string"lastName". In the expression${y[x]},baseis the result of the variable resolution foryandpropertyis the result of the variable resolution forx.Though only a single
ELResolveris associated with anELContext, there are usually multiple resolvers considered for any given variable or property resolution.ELResolvers are combined together using CompositeELResolver s, to define rich semantics for evaluating an expression.For the getValue(ELContext, Object, Object) , getType(ELContext, Object, Object) , setValue(ELContext, Object, Object, Object) and isReadOnly(ELContext, Object, Object) methods, an
ELResolveris not responsible for resolving all possible (base, property) pairs. In fact, most resolvers will only handle abaseof a single type. To indicate that a resolver has successfully resolved a particular (base, property) pair, it must set thepropertyResolvedproperty of theELContexttotrue. If it could not handle the given pair, it must leave this property alone. The caller must ignore the return value of the method ifpropertyResolvedisfalse.The getFeatureDescriptors(ELContext, Object) and getCommonPropertyType(ELContext, Object) methods are primarily designed for design-time tool support, but must handle invocation at runtime as well. The isDesignTime() method can be used to determine if the resolver is being consulted at design-time or runtime.