Package org.apache.el

# Class ValueExpressionImpl

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

All Implemented Interfaces:
  `Externalizable`, `Serializable`

public final class ValueExpressionImpl extends ValueExpression implements 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
Constructor
Description
`ValueExpressionImpl()`
`ValueExpressionImpl(String expr, org.apache.el.parser.Node node, FunctionMapper fnMapper, VariableMapper varMapper, Class<?> expectedType)`

## Method Summary

Modifier and Type
Method
Description
`boolean`
`equals(Object obj)`
`Class<?>`
`getExpectedType()`
`String`
`getExpressionString()`
Returns the type the result of the expression will be coerced to after evaluation.
`Class<?>`
`getType(ELContext context)`
`<T> T`
`getValue(ELContext context)`
`ValueReference`
`getValueReference(ELContext context)`
`int`
`hashCode()`
`boolean`
`isLiteralText()`
`boolean`
`isReadOnly(ELContext context)`
`void`
`readExternal(ObjectInput in)`
`void`
`setValue(ELContext context, Object value)`
`String`
`toString()`
`void`
`writeExternal(ObjectOutput out)`

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

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

## Constructor Details

### ValueExpressionImpl

public ValueExpressionImpl()

### ValueExpressionImpl

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

## Method Details

### equals

public boolean equals(Object obj)

Specified by:
  `equals` in class `Expression`

### getExpectedType

public Class<?> getExpectedType()

Specified by:
  `getExpectedType` in class `ValueExpression`

### getExpressionString

public 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 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 <T> T getValue(ELContext context) throws PropertyNotFoundException, ELException

Specified by:
  `getValue` in class `ValueExpression`
Type Parameters:
  `T` - The expected type for the result of evaluating this value expression
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(ObjectInput in) throws IOException, ClassNotFoundException

Specified by:
  `readExternal` in interface `Externalizable`
Throws:
  `IOException`
  `ClassNotFoundException`

### setValue

public void setValue(ELContext context, 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(ObjectOutput out) throws IOException

Specified by:
  `writeExternal` in interface `Externalizable`
Throws:
  `IOException`

### toString

public String toString()

Overrides:
  `toString` in class `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