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} method
can 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 are
called. 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. |