ValueExpressionImplpublic final class ValueExpressionImpl extends ValueExpression implements ExternalizableAn 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. |
(Omit source code)
Fields Summary |
---|
private Class | expectedType | private String | expr | private FunctionMapper | fnMapper | private VariableMapper | varMapper | private transient org.apache.el.parser.Node | node |
Methods Summary |
---|
public boolean | equals(java.lang.Object obj)
return (obj instanceof ValueExpressionImpl && obj.hashCode() == this
.hashCode());
| public java.lang.Class | getExpectedType()
return this.expectedType;
| public java.lang.String | getExpressionString()Returns the type the result of the expression will be coerced to after
evaluation.
return this.expr;
| private org.apache.el.parser.Node | getNode()
if (this.node == null) {
this.node = ExpressionBuilder.createNode(this.expr);
}
return this.node;
| public java.lang.Class | getType(javax.el.ELContext context)
EvaluationContext ctx = new EvaluationContext(context, this.fnMapper,
this.varMapper);
return this.getNode().getType(ctx);
| public java.lang.Object | getValue(javax.el.ELContext context)
EvaluationContext ctx = new EvaluationContext(context, this.fnMapper,
this.varMapper);
Object value = this.getNode().getValue(ctx);
if (this.expectedType != null) {
return ELSupport.coerceToType(value, this.expectedType);
}
return value;
| public int | hashCode()
return this.expr.hashCode();
| public boolean | isLiteralText()
try {
return this.getNode() instanceof AstLiteralExpression;
} catch (ELException ele) {
return false;
}
| public boolean | isReadOnly(javax.el.ELContext context)
EvaluationContext ctx = new EvaluationContext(context, this.fnMapper,
this.varMapper);
return this.getNode().isReadOnly(ctx);
| public void | readExternal(java.io.ObjectInput in)
this.expr = in.readUTF();
String type = in.readUTF();
if (!"".equals(type)) {
this.expectedType = ReflectionUtil.forName(type);
}
this.fnMapper = (FunctionMapper) in.readObject();
this.varMapper = (VariableMapper) in.readObject();
| public void | setValue(javax.el.ELContext context, java.lang.Object value)
EvaluationContext ctx = new EvaluationContext(context, this.fnMapper,
this.varMapper);
this.getNode().setValue(ctx, value);
| public java.lang.String | toString()
return "ValueExpression["+this.expr+"]";
| public void | writeExternal(java.io.ObjectOutput out)
out.writeUTF(this.expr);
out.writeUTF((this.expectedType != null) ? this.expectedType.getName()
: "");
out.writeObject(this.fnMapper);
out.writeObject(this.varMapper);
|
|