An
Expression
that can get or set a value.
In previous incarnations of this API, expressions could only be read. ValueExpression
objects can now be used both to retrieve a value and to set a value. Expressions that can have a value set on them are referred to as l-value expressions. Those that cannot are referred to as r-value expressions. Not all r-value expressions can be used as l-value expressions (e.g. "${1+1}"
or "${firstName} ${lastName}"
). See the EL Specification for details. Expressions that cannot be used as l-values must always return true
from isReadOnly()
.
The {@link ExpressionFactory#createValueExpression} methodcan be used to parse an expression string and return a concrete instance of ValueExpression
that encapsulates the parsed expression. The {@link FunctionMapper} is used at parse time, not evaluation time, so one is not needed to evaluate an expression using this class. However, the {@link ELContext} is needed at evaluation time.
The {@link #getValue}, {@link #setValue}, {@link #isReadOnly} and{@link #getType} methods will evaluate the expression each time they arecalled. The {@link ELResolver} in the ELContext
is used to resolve the top-level variables and to determine the behavior of the .
and []
operators. For any of the four methods, the {@link ELResolver#getValue} method is used to resolve all properties up to but excluding the last one. This provides the base
object. At the last resolution, the ValueExpression
will call the corresponding {@link ELResolver#getValue}, {@link ELResolver#setValue}, {@link ELResolver#isReadOnly} or {@link ELResolver#getType} method, depending on which was called on the ValueExpression
.
See the notes about comparison, serialization and immutability in the {@link Expression} javadocs.
@see javax.el.ELResolver
@see javax.el.Expression
@see javax.el.ExpressionFactory
@see javax.el.ValueExpression
@author Jacob Hookom [jacob@hookom.net]
@version $Id: ValueExpressionImpl.java 939519 2010-04-30 00:12:23Z kkolinko $