com.opensymphony.xwork2.conversion.impl

## Class InstantiatingNullHandler

- java.lang.Object
- - com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler

- All Implemented Interfaces:
    NullHandler

      public class InstantiatingNullHandler
      extends Object
      implements NullHandler

  Provided that the key `ReflectionContextState.CREATE_NULL_OBJECTS` is in the action context with a value of true (this key is set only during the execution of the `ParametersInterceptor`), OGNL expressions that have caused a NullPointerException will be temporarily stopped for evaluation while the system automatically tries to solve the null references by automatically creating the object.

  The following rules are used when handling null references:

  - If the property is declared exactly as a `Collection` or `List`, then an ArrayList shall be returned and assigned to the null references.
  - If the property is declared as a `Map`, then a HashMap will be returned and assigned to the null references.
  - If the null property is a simple bean with a no-arg constructor, it will simply be created using the `ObjectFactory.buildBean(java.lang.Class, java.util.Map)` method.

  For example, if a form element has a text field named person.name and the expression person evaluates to null, then this class will be invoked. Because the person expression evaluates to a Person class, a new Person is created and assigned to the null reference. Finally, the name is set on that object and the overall effect is that the system automatically created a Person object for you, set it by calling setUsers() and then finally called getUsers().setName() as you would typically expect.

  Author:
    Matt Ho, Patrick Lightbody

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `InstantiatingNullHandler()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `Object` | `nullMethodResult(Map<String,Object> context, Object target, String methodName, Object[] args)` Method called on target returned null.
    `Object` | `nullPropertyValue(Map<String,Object> context, Object target, Object property)` Property in target evaluated to null.
    `void` | `setObjectFactory(ObjectFactory fac)`
    `void` | `setObjectTypeDeterminer(ObjectTypeDeterminer det)`
    `void` | `setReflectionProvider(ReflectionProvider prov)`

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

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### InstantiatingNullHandler

          public InstantiatingNullHandler()

  - ### Method Detail

    - #### setObjectTypeDeterminer

          public void setObjectTypeDeterminer(ObjectTypeDeterminer det)

    - #### setReflectionProvider

          public void setReflectionProvider(ReflectionProvider prov)

    - #### setObjectFactory

          public void setObjectFactory(ObjectFactory fac)

    - #### nullMethodResult

          public Object nullMethodResult(Map<String,Object> context,
                                Object target,
                                String methodName,
                                Object[] args)

      Description copied from interface: `NullHandler`
      Method called on target returned null.
      Specified by:
        `nullMethodResult` in interface `NullHandler`
      Parameters:
        `context` - context
        `target` - target object
        `methodName` - method name
        `args` - arguments
      Returns:
        object

    - #### nullPropertyValue

          public Object nullPropertyValue(Map<String,Object> context,
                                 Object target,
                                 Object property)

      Description copied from interface: `NullHandler`
      Property in target evaluated to null. Property can be a constant String property name or a DynamicSubscript.
      Specified by:
        `nullPropertyValue` in interface `NullHandler`
      Parameters:
        `context` - context
        `target` - target object
        `property` - property
      Returns:
        object

Copyright © 2000–2022 Apache Software Foundation. All rights reserved.