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
`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`