Package org.apache.el

## Class ValueExpressionImpl

- java.lang.Object
- - jakarta.el.Expression
  - - jakarta.el.ValueExpression
    - - org.apache.el.ValueExpressionImpl

All Implemented Interfaces:
  `java.io.Externalizable`, `java.io.Serializable`

    public final class ValueExpressionImpl
    extends ValueExpression
    implements java.io.Externalizable

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 `ExpressionFactory.createValueExpression(jakarta.el.ELContext, java.lang.String, java.lang.Class<?>)` method can be used to parse an expression string and return a concrete instance of `ValueExpression` that encapsulates the parsed expression. The `FunctionMapper` is used at parse time, not evaluation time, so one is not needed to evaluate an expression using this class. However, the `ELContext` is needed at evaluation time.

The `getValue(jakarta.el.ELContext)`, `setValue(jakarta.el.ELContext, java.lang.Object)`, `isReadOnly(jakarta.el.ELContext)` and `getType(jakarta.el.ELContext)` methods will evaluate the expression each time they are called. The `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 `ELResolver.getValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object)` 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 `ELResolver.getValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object)`, `ELResolver.setValue(jakarta.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)`, `ELResolver.isReadOnly(jakarta.el.ELContext, java.lang.Object, java.lang.Object)` or `ELResolver.getType(jakarta.el.ELContext, java.lang.Object, java.lang.Object)` method, depending on which was called on the `ValueExpression`.

See the notes about comparison, serialization and immutability in the `Expression` javadocs.

Author:
  Jacob Hookom [jacob@hookom.net]
See Also:
  `ELResolver`, `Expression`, `ExpressionFactory`, `ValueExpression`, Serialized Form

### Constructor Summary

Constructors
`ValueExpressionImpl()`
`ValueExpressionImpl​(java.lang.String expr, org.apache.el.parser.Node node, FunctionMapper fnMapper, VariableMapper varMapper, java.lang.Class<?> expectedType)`

### Method Summary

All Methods Instance Methods Concrete Methods
`boolean` `equals​(java.lang.Object obj)`
`java.lang.Class<?>` `getExpectedType()`
`java.lang.String` `getExpressionString()` Returns the type the result of the expression will be coerced to after evaluation.
`java.lang.Class<?>` `getType​(ELContext context)`
`java.lang.Object` `getValue​(ELContext context)`
`ValueReference` `getValueReference​(ELContext context)`
`int` `hashCode()`
`boolean` `isLiteralText()`
`boolean` `isReadOnly​(ELContext context)`
`void` `readExternal​(java.io.ObjectInput in)`
`void` `setValue​(ELContext context, java.lang.Object value)`
`java.lang.String` `toString()`
`void` `writeExternal​(java.io.ObjectOutput out)`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### ValueExpressionImpl

    public ValueExpressionImpl()

#### ValueExpressionImpl

    public ValueExpressionImpl​(java.lang.String expr,
                               org.apache.el.parser.Node node,
                               FunctionMapper fnMapper,
                               VariableMapper varMapper,
                               java.lang.Class<?> expectedType)

### Method Detail

#### equals

    public boolean equals​(java.lang.Object obj)

Specified by:
  `equals` in class `Expression`

#### getExpectedType

    public java.lang.Class<?> getExpectedType()

Specified by:
  `getExpectedType` in class `ValueExpression`

#### getExpressionString

    public java.lang.String getExpressionString()

Returns the type the result of the expression will be coerced to after evaluation.

Specified by:
  `getExpressionString` in class `Expression`
Returns:
  the `expectedType` passed to the `ExpressionFactory.createValueExpression` method that created this `ValueExpression`.
See Also:
  `Expression.getExpressionString()`

#### getType

    public java.lang.Class<?> getType​(ELContext context)
                               throws PropertyNotFoundException,
                                      ELException

Specified by:
  `getType` in class `ValueExpression`
Parameters:
  `context` - The EL context for this evaluation
Returns:
  The type of the result of this value expression
Throws:
  `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
  `ELException` - Wraps any exception throw whilst resolving a property or variable

#### getValue

    public java.lang.Object getValue​(ELContext context)
                              throws PropertyNotFoundException,
                                     ELException

Specified by:
  `getValue` in class `ValueExpression`
Parameters:
  `context` - The EL context for this evaluation
Returns:
  The result of evaluating this value expression
Throws:
  `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
  `ELException` - Wraps any exception throw whilst resolving a property or variable

#### hashCode

    public int hashCode()

Specified by:
  `hashCode` in class `Expression`

#### isLiteralText

    public boolean isLiteralText()

Specified by:
  `isLiteralText` in class `Expression`

#### isReadOnly

    public boolean isReadOnly​(ELContext context)
                       throws PropertyNotFoundException,
                              ELException

Specified by:
  `isReadOnly` in class `ValueExpression`
Parameters:
  `context` - The EL context for this evaluation
Returns:
  `true` if this expression is read only otherwise `false`
Throws:
  `PropertyNotFoundException` - If a property/variable resolution failed because no match was found or a match was found but was not readable
  `ELException` - Wraps any exception throw whilst resolving a property or variable

#### readExternal

    public void readExternal​(java.io.ObjectInput in)
                      throws java.io.IOException,
                             java.lang.ClassNotFoundException

Specified by:
  `readExternal` in interface `java.io.Externalizable`
Throws:
  `java.io.IOException`
  `java.lang.ClassNotFoundException`

#### setValue

    public void setValue​(ELContext context,
                         java.lang.Object value)
                  throws PropertyNotFoundException,
                         PropertyNotWritableException,
                         ELException

Specified by:
  `setValue` in class `ValueExpression`
Parameters:
  `context` - The EL context for this evaluation
  `value` - The value to set the property to which this value expression refers
Throws:
  `PropertyNotFoundException` - If a property/variable resolution failed because no match was found
  `PropertyNotWritableException` - If a property/variable resolution failed because a match was found but was not writable
  `ELException` - Wraps any exception throw whilst resolving a property or variable

#### writeExternal

    public void writeExternal​(java.io.ObjectOutput out)
                       throws java.io.IOException

Specified by:
  `writeExternal` in interface `java.io.Externalizable`
Throws:
  `java.io.IOException`

#### toString

    public java.lang.String toString()

Overrides:
  `toString` in class `java.lang.Object`

#### getValueReference

    public ValueReference getValueReference​(ELContext context)

Overrides:
  `getValueReference` in class `ValueExpression`
Parameters:
  `context` - The EL context for this evaluation
Returns:
  This default implementation always returns `null`
Since:
  EL 2.2