org.springframework.web.method.support

## Class ModelAndViewContainer

- java.lang.Object
- - org.springframework.web.method.support.ModelAndViewContainer

-     public class ModelAndViewContainer
      extends Object

  Records model and view related decisions made by `HandlerMethodArgumentResolvers` and `HandlerMethodReturnValueHandlers` during the course of invocation of a controller method.

  The `setRequestHandled(boolean)` flag can be used to indicate the request has been handled directly and view resolution is not required.

  A default `Model` is automatically created at instantiation. An alternate model instance may be provided via `setRedirectModel(org.springframework.ui.ModelMap)` for use in a redirect scenario. When `setRedirectModelScenario(boolean)` is set to `true` signalling a redirect scenario, the `getModel()` returns the redirect model instead of the default model.

  Since:
    3.1
  Author:
    Rossen Stoyanchev, Juergen Hoeller

- - ### Constructor Summary

    Constructors
    Constructor and Description
    `ModelAndViewContainer()`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `ModelAndViewContainer` | `addAllAttributes(Map<String,?> attributes)` Copy all attributes to the underlying model.
    `ModelAndViewContainer` | `addAttribute(Object value)` Add the supplied attribute to the underlying model.
    `ModelAndViewContainer` | `addAttribute(String name, Object value)` Add the supplied attribute to the underlying model.
    `boolean` | `containsAttribute(String name)` Whether the underlying model contains the given attribute name.
    `ModelMap` | `getDefaultModel()` Return the "default" model created at instantiation.
    `ModelMap` | `getModel()` Return the model to use -- either the "default" or the "redirect" model.
    `SessionStatus` | `getSessionStatus()` Return the `SessionStatus` instance to use that can be used to signal that session processing is complete.
    `HttpStatus` | `getStatus()` Return the configured HTTP status, if any.
    `Object` | `getView()` Return the View object, or `null` if we are using a view name to be resolved by the DispatcherServlet via a ViewResolver.
    `String` | `getViewName()` Return the view name to be resolved by the DispatcherServlet via a ViewResolver, or `null` if a View object is set.
    `boolean` | `isBindingDisabled(String name)` Whether binding is disabled for the given model attribute.
    `boolean` | `isRequestHandled()` Whether the request has been handled fully within the handler.
    `boolean` | `isViewReference()` Whether the view is a view reference specified via a name to be resolved by the DispatcherServlet via a ViewResolver.
    `ModelAndViewContainer` | `mergeAttributes(Map<String,?> attributes)` Copy attributes in the supplied `Map` with existing objects of the same name taking precedence (i.e.
    `ModelAndViewContainer` | `removeAttributes(Map<String,?> attributes)` Remove the given attributes from the model.
    `void` | `setBinding(String attributeName, boolean enabled)` Register whether data binding should occur for a corresponding model attribute, corresponding to an `@ModelAttribute(binding=true/false)` declaration.
    `void` | `setBindingDisabled(String attributeName)` Programmatically register an attribute for which data binding should not occur, not even for a subsequent `@ModelAttribute` declaration.
    `void` | `setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect)` By default, the content of the "default" model is used both during rendering and redirect scenarios.
    `void` | `setRedirectModel(ModelMap redirectModel)` Provide a separate model instance to use in a redirect scenario.
    `void` | `setRedirectModelScenario(boolean redirectModelScenario)` Whether the controller has returned a redirect instruction, e.g.
    `void` | `setRequestHandled(boolean requestHandled)` Whether the request has been handled fully within the handler, e.g.
    `void` | `setStatus(HttpStatus status)` Provide an HTTP status that will be passed on to with the `ModelAndView` used for view rendering purposes.
    `void` | `setView(Object view)` Set a View object to be used by the DispatcherServlet.
    `void` | `setViewName(String viewName)` Set a view name to be resolved by the DispatcherServlet via a ViewResolver.
    `String` | `toString()` Return diagnostic information.

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

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

- - ### Constructor Detail

    - #### ModelAndViewContainer

          public ModelAndViewContainer()

  - ### Method Detail

    - #### setIgnoreDefaultModelOnRedirect

          public void setIgnoreDefaultModelOnRedirect(boolean ignoreDefaultModelOnRedirect)

      By default, the content of the "default" model is used both during rendering and redirect scenarios. Alternatively controller methods can declare an argument of type `RedirectAttributes` and use it to provide attributes to prepare the redirect URL.

      Setting this flag to `true` guarantees the "default" model is never used in a redirect scenario even if a RedirectAttributes argument is not declared. Setting it to `false` means the "default" model may be used in a redirect if the controller method doesn't declare a RedirectAttributes argument.

      The default setting is `false`.

    - #### setViewName

          public void setViewName(@Nullable
                                  String viewName)

      Set a view name to be resolved by the DispatcherServlet via a ViewResolver. Will override any pre-existing view name or View.

    - #### getViewName

          @Nullable
          public String getViewName()

      Return the view name to be resolved by the DispatcherServlet via a ViewResolver, or `null` if a View object is set.

    - #### setView

          public void setView(@Nullable
                              Object view)

      Set a View object to be used by the DispatcherServlet. Will override any pre-existing view name or View.

    - #### getView

          @Nullable
          public Object getView()

      Return the View object, or `null` if we are using a view name to be resolved by the DispatcherServlet via a ViewResolver.

    - #### isViewReference

          public boolean isViewReference()

      Whether the view is a view reference specified via a name to be resolved by the DispatcherServlet via a ViewResolver.

    - #### getModel

          public ModelMap getModel()

      Return the model to use -- either the "default" or the "redirect" model. The default model is used if `redirectModelScenario=false` or there is no redirect model (i.e. RedirectAttributes was not declared as a method argument) and `ignoreDefaultModelOnRedirect=false`.

    - #### getDefaultModel

          public ModelMap getDefaultModel()

      Return the "default" model created at instantiation.

      In general it is recommended to use `getModel()` instead which returns either the "default" model (template rendering) or the "redirect" model (redirect URL preparation). Use of this method may be needed for advanced cases when access to the "default" model is needed regardless, e.g. to save model attributes specified via `@SessionAttributes`.

      Returns:
        the default model (never `null`)
      Since:
        4.1.4

    - #### setRedirectModel

          public void setRedirectModel(ModelMap redirectModel)

      Provide a separate model instance to use in a redirect scenario.

      The provided additional model however is not used unless `setRedirectModelScenario(boolean)` gets set to `true` to signal an actual redirect scenario.

    - #### setRedirectModelScenario

          public void setRedirectModelScenario(boolean redirectModelScenario)

      Whether the controller has returned a redirect instruction, e.g. a "redirect:" prefixed view name, a RedirectView instance, etc.

    - #### setStatus

          public void setStatus(@Nullable
                                HttpStatus status)

      Provide an HTTP status that will be passed on to with the `ModelAndView` used for view rendering purposes.
      Since:
        4.3

    - #### getStatus

          @Nullable
          public HttpStatus getStatus()

      Return the configured HTTP status, if any.
      Since:
        4.3

    - #### setBindingDisabled

          public void setBindingDisabled(String attributeName)

      Programmatically register an attribute for which data binding should not occur, not even for a subsequent `@ModelAttribute` declaration.
      Parameters:
        `attributeName` - the name of the attribute
      Since:
        4.3

    - #### isBindingDisabled

          public boolean isBindingDisabled(String name)

      Whether binding is disabled for the given model attribute.
      Since:
        4.3

    - #### setBinding

          public void setBinding(String attributeName,
                                 boolean enabled)

      Register whether data binding should occur for a corresponding model attribute, corresponding to an `@ModelAttribute(binding=true/false)` declaration.

      Note: While this flag will be taken into account by `isBindingDisabled(java.lang.String)`, a hard `setBindingDisabled(java.lang.String)` declaration will always override it.

      Parameters:
        `attributeName` - the name of the attribute
      Since:
        4.3.13

    - #### getSessionStatus

          public SessionStatus getSessionStatus()

      Return the `SessionStatus` instance to use that can be used to signal that session processing is complete.

    - #### setRequestHandled

          public void setRequestHandled(boolean requestHandled)

      Whether the request has been handled fully within the handler, e.g. `@ResponseBody` method, and therefore view resolution is not necessary. This flag can also be set when controller methods declare an argument of type `ServletResponse` or `OutputStream`).

      The default value is `false`.

    - #### isRequestHandled

          public boolean isRequestHandled()

      Whether the request has been handled fully within the handler.

    - #### addAttribute

          public ModelAndViewContainer addAttribute(String name,
                                                    @Nullable
                                                    Object value)

      Add the supplied attribute to the underlying model. A shortcut for `getModel().addAttribute(String, Object)`.

    - #### addAttribute

          public ModelAndViewContainer addAttribute(Object value)

      Add the supplied attribute to the underlying model. A shortcut for `getModel().addAttribute(Object)`.

    - #### addAllAttributes

          public ModelAndViewContainer addAllAttributes(@Nullable
                                                        Map<String,?> attributes)

      Copy all attributes to the underlying model. A shortcut for `getModel().addAllAttributes(Map)`.

    - #### mergeAttributes

          public ModelAndViewContainer mergeAttributes(@Nullable
                                                       Map<String,?> attributes)

      Copy attributes in the supplied `Map` with existing objects of the same name taking precedence (i.e. not getting replaced). A shortcut for `getModel().mergeAttributes(Map<String, ?>)`.

    - #### removeAttributes

          public ModelAndViewContainer removeAttributes(@Nullable
                                                        Map<String,?> attributes)

      Remove the given attributes from the model.

    - #### containsAttribute

          public boolean containsAttribute(String name)

      Whether the underlying model contains the given attribute name. A shortcut for `getModel().containsAttribute(String)`.

    - #### toString

          public String toString()

      Return diagnostic information.
      Overrides:
        `toString` in class `Object`