org.springframework.web.servlet.view.velocity

## Class VelocityToolboxView

- java.lang.Object
- - org.springframework.context.support.ApplicationObjectSupport
  - - org.springframework.web.context.support.WebApplicationObjectSupport
    - - org.springframework.web.servlet.view.AbstractView
      - - org.springframework.web.servlet.view.AbstractUrlBasedView
        - - org.springframework.web.servlet.view.AbstractTemplateView
          - - org.springframework.web.servlet.view.velocity.VelocityView
            - - org.springframework.web.servlet.view.velocity.VelocityToolboxView

- All Implemented Interfaces:
    Aware, BeanNameAware, InitializingBean, ApplicationContextAware, ServletContextAware, View
  Direct Known Subclasses:
    VelocityLayoutView

      public class VelocityToolboxView
      extends VelocityView

  `VelocityView` subclass which adds support for Velocity Tools toolboxes and Velocity Tools ViewTool callbacks / Velocity Tools 1.3 init methods.

  Specify a "toolboxConfigLocation", for example "/WEB-INF/toolbox.xml", to automatically load a Velocity Tools toolbox definition file and expose all defined tools in the specified scopes. If no config location is specified, no toolbox will be loaded and exposed.

  This view will always create a special Velocity context, namely an instance of the ChainedContext class which is part of the view package of Velocity tools. This allows to use tools from the view package of Velocity Tools, like LinkTool, which need to be initialized with a special context that implements the ViewContext interface (i.e. a ChainedContext).

  This view also checks tools that are specified as "toolAttributes": If they implement the ViewTool interface, they will get initialized with the Velocity context. This allows tools from the view package of Velocity Tools, such as LinkTool, to be defined as `"toolAttributes"` on a VelocityToolboxView, instead of in a separate toolbox XML file.

  This is a separate class mainly to avoid a required dependency on the view package of Velocity Tools in `VelocityView` itself. As of Spring 3.0, this class requires Velocity Tools 1.3 or higher.

  Since:
    1.1.3
  Author:
    Juergen Hoeller
  See Also:
    `setToolboxConfigLocation(java.lang.String)`, `initTool(java.lang.Object, org.apache.velocity.context.Context)`, `ViewContext`, `ChainedContext`

- - ### Field Summary

    - ### Fields inherited from class org.springframework.web.servlet.view.AbstractTemplateView

      `SPRING_MACRO_REQUEST_CONTEXT_ATTRIBUTE`

    - ### Fields inherited from class org.springframework.web.servlet.view.AbstractView

      `DEFAULT_CONTENT_TYPE`

    - ### Fields inherited from class org.springframework.context.support.ApplicationObjectSupport

      `logger`

    - ### Fields inherited from interface org.springframework.web.servlet.View

      `PATH_VARIABLES, RESPONSE_STATUS_ATTRIBUTE, SELECTED_CONTENT_TYPE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VelocityToolboxView()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected org.apache.velocity.context.Context` | `createVelocityContext(Map<String,Object> model, HttpServletRequest request, HttpServletResponse response)` Overridden to create a ChainedContext, which is part of the view package of Velocity Tools, as special context.
    `protected String` | `getToolboxConfigLocation()` Return the Velocity Toolbox config location, if any.
    `protected void` | `initTool(Object tool, org.apache.velocity.context.Context velocityContext)` Overridden to check for the ViewContext interface which is part of the view package of Velocity Tools.
    `void` | `setToolboxConfigLocation(String toolboxConfigLocation)` Set a Velocity Toolbox config location, for example "/WEB-INF/toolbox.xml", to automatically load a Velocity Tools toolbox definition file and expose all defined tools in the specified scopes.

    - ### Methods inherited from class org.springframework.web.servlet.view.velocity.VelocityView

      `autodetectVelocityEngine, checkResource, createVelocityContext, doRender, exposeHelpers, exposeHelpers, exposeHelpers, exposeToolAttributes, getEncoding, getTemplate, getTemplate, getVelocityEngine, initApplicationContext, isCacheTemplate, mergeTemplate, renderMergedTemplateModel, setCacheTemplate, setDateToolAttribute, setEncoding, setNumberToolAttribute, setToolAttributes, setVelocityEngine`

    - ### Methods inherited from class org.springframework.web.servlet.view.AbstractTemplateView

      `applyContentType, renderMergedOutputModel, setAllowRequestOverride, setAllowSessionOverride, setExposeRequestAttributes, setExposeSessionAttributes, setExposeSpringMacroHelpers`

    - ### Methods inherited from class org.springframework.web.servlet.view.AbstractUrlBasedView

      `afterPropertiesSet, getUrl, isUrlRequired, setUrl, toString`

    - ### Methods inherited from class org.springframework.web.servlet.view.AbstractView

      `addStaticAttribute, createMergedOutputModel, createRequestContext, createTemporaryOutputStream, exposeModelAsRequestAttributes, generatesDownloadContent, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getStaticAttributes, isExposePathVariables, prepareResponse, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setExposePathVariables, setRequestContextAttribute, setResponseContentType, writeToResponse`

    - ### Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport

      `getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, initServletContext, isContextRequired, setServletContext`

    - ### Methods inherited from class org.springframework.context.support.ApplicationObjectSupport

      `getApplicationContext, getMessageSourceAccessor, requiredContextClass, setApplicationContext`

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

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

- - ### Constructor Detail

    - #### VelocityToolboxView

          public VelocityToolboxView()

  - ### Method Detail

    - #### setToolboxConfigLocation

          public void setToolboxConfigLocation(String toolboxConfigLocation)

      Set a Velocity Toolbox config location, for example "/WEB-INF/toolbox.xml", to automatically load a Velocity Tools toolbox definition file and expose all defined tools in the specified scopes. If no config location is specified, no toolbox will be loaded and exposed.

      The specfied location string needs to refer to a ServletContext resource, as expected by ServletToolboxManager which is part of the view package of Velocity Tools.

      See Also:
        `ServletToolboxManager.getInstance(javax.servlet.ServletContext, java.lang.String)`

    - #### getToolboxConfigLocation

          protected String getToolboxConfigLocation()

      Return the Velocity Toolbox config location, if any.

    - #### createVelocityContext

          protected org.apache.velocity.context.Context createVelocityContext(Map<String,Object> model,
                                                                  HttpServletRequest request,
                                                                  HttpServletResponse response)
                                                                       throws Exception

      Overridden to create a ChainedContext, which is part of the view package of Velocity Tools, as special context. ChainedContext is needed for initialization of ViewTool instances.
      Overrides:
        `createVelocityContext` in class `VelocityView`
      Parameters:
        `model` - the model Map, containing the model attributes to be exposed to the view
        `request` - current HTTP request
        `response` - current HTTP response
      Returns:
        the Velocity Context
      Throws:
        `Exception` - if there's a fatal error while creating the context
      See Also:
        `initTool(java.lang.Object, org.apache.velocity.context.Context)`

    - #### initTool

          protected void initTool(Object tool,
                      org.apache.velocity.context.Context velocityContext)
                           throws Exception

      Overridden to check for the ViewContext interface which is part of the view package of Velocity Tools. This requires a special Velocity context, like ChainedContext as set up by `createVelocityContext(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)` in this class.
      Overrides:
        `initTool` in class `VelocityView`
      Parameters:
        `tool` - the tool instance to initialize
        `velocityContext` - the Velocity context
      Throws:
        `Exception` - if initializion of the tool failed
      See Also:
        `VelocityView.createVelocityContext(java.util.Map<java.lang.String, java.lang.Object>, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)`, `ViewContext`, `ChainedContext`, `VelocityToolboxView`