ValueExpressionImpl (Apache Tomcat 9.0.73 API Documentation)

Package org.apache.el

## Class ValueExpressionImpl

- java.lang.Object
- - javax.el.Expression
  - - javax.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(javax.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(javax.el.ELContext)`, `setValue(javax.el.ELContext, java.lang.Object)`, `isReadOnly(javax.el.ELContext)` and `getType(javax.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(javax.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(javax.el.ELContext, java.lang.Object, java.lang.Object)`, `ELResolver.setValue(javax.el.ELContext, java.lang.Object, java.lang.Object, java.lang.Object)`, `ELResolver.isReadOnly(javax.el.ELContext, java.lang.Object, java.lang.Object)` or `ELResolver.getType(javax.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​(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
    Modifier and Type | Method | Description
    --- | --- | ---
    `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