public abstract class

AbstractView

extends WebApplicationObjectSupport
implements BeanNameAware View
java.lang.Object
   ↳ org.springframework.context.support.ApplicationObjectSupport
     ↳ org.springframework.web.context.support.WebApplicationObjectSupport
       ↳ org.springframework.web.servlet.view.AbstractView
Known Direct Subclasses
Known Indirect Subclasses

Class Overview

Abstract base class for View implementations. Subclasses should be JavaBeans, to allow for convenient configuration as Spring-managed bean instances.

Provides support for static attributes, to be made available to the view, with a variety of ways to specify them. Static attributes will be merged with the given dynamic attributes (the model that the controller returned) for each render operation.

Extends WebApplicationObjectSupport, which will be helpful to some views. Subclasses just need to implement the actual rendering.

Summary

Constants
String DEFAULT_CONTENT_TYPE Default content type.
[Expand]
Inherited Fields
From class org.springframework.context.support.ApplicationObjectSupport
From interface org.springframework.web.servlet.View
Public Constructors
AbstractView()
Public Methods
void addStaticAttribute(String name, Object value)
Add static data to this view, exposed in each view.
Map<StringObject> getAttributesMap()
Allow Map access to the static attributes of this view, with the option to add or override specific entries.
String getBeanName()
Return the view's name.
String getContentType()
Return the content type for this view.
String getRequestContextAttribute()
Return the name of the RequestContext attribute, if any.
Map getStaticAttributes()
Return the static attributes for this view.
void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
Prepares the view given the specified model, merging it with static attributes and a RequestContext attribute, if necessary.
void setAttributes(Properties attributes)
Set static attributes for this view from a java.util.Properties object.
void setAttributesCSV(String propString)
Set static attributes as a CSV string.
void setAttributesMap(Map<String, ?> attributes)
Set static attributes for this view from a Map.
void setBeanName(String beanName)
Set the view's name.
void setContentType(String contentType)
Set the content type for this view.
void setRequestContextAttribute(String requestContextAttribute)
Set the name of the RequestContext attribute for this view.
String toString()
Protected Methods
RequestContext createRequestContext(HttpServletRequest request, HttpServletResponse response, Map<StringObject> model)
Create a RequestContext to expose under the specified attribute name.
ByteArrayOutputStream createTemporaryOutputStream()
Create a temporary OutputStream for this view.
void exposeModelAsRequestAttributes(Map<StringObject> model, HttpServletRequest request)
Expose the model objects in the given map as request attributes.
boolean generatesDownloadContent()
Return whether this view generates download content (typically binary content like PDF or Excel files).
void prepareResponse(HttpServletRequest request, HttpServletResponse response)
Prepare the given response for rendering.
abstract void renderMergedOutputModel(Map<StringObject> model, HttpServletRequest request, HttpServletResponse response)
Subclasses must implement this method to actually render the view.
void writeToResponse(HttpServletResponse response, ByteArrayOutputStream baos)
Write the given temporary OutputStream to the HTTP response.
[Expand]
Inherited Methods
From class org.springframework.web.context.support.WebApplicationObjectSupport
From class org.springframework.context.support.ApplicationObjectSupport
From class java.lang.Object
From interface org.springframework.beans.factory.BeanNameAware
From interface org.springframework.context.ApplicationContextAware
From interface org.springframework.web.context.ServletContextAware
From interface org.springframework.web.servlet.View

Constants

public static final String DEFAULT_CONTENT_TYPE

Default content type. Overridable as bean property.

Constant Value: "text/html;charset=ISO-8859-1"

Public Constructors

public AbstractView ()

Public Methods

public void addStaticAttribute (String name, Object value)

Add static data to this view, exposed in each view.

"Static" attributes are fixed attributes that are specified in the View instance configuration. "Dynamic" attributes, on the other hand, are values passed in as part of the model.

Must be invoked before any calls to render.

Parameters
name the name of the attribute to expose
value the attribute value to expose

public Map<StringObject> getAttributesMap ()

Allow Map access to the static attributes of this view, with the option to add or override specific entries.

Useful for specifying entries directly, for example via "attributesMap[myKey]". This is particularly useful for adding or overriding entries in child view definitions.

public String getBeanName ()

Return the view's name. Should never be null, if the view was correctly configured.

public String getContentType ()

Return the content type for this view.

Returns
  • the content type String (optionally including a character set), or null if not predetermined.

public String getRequestContextAttribute ()

Return the name of the RequestContext attribute, if any.

public Map getStaticAttributes ()

Return the static attributes for this view. Handy for testing.

Returns an unmodifiable Map, as this is not intended for manipulating the Map but rather just for checking the contents.

Returns
  • the static attributes in this view

public void render (Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)

Prepares the view given the specified model, merging it with static attributes and a RequestContext attribute, if necessary. Delegates to renderMergedOutputModel for the actual rendering.

Parameters
model Map with name Strings as keys and corresponding model objects as values (Map can also be null in case of empty model)
request current HTTP request
response HTTP response we are building
Throws
Exception

public void setAttributes (Properties attributes)

Set static attributes for this view from a java.util.Properties object.

"Static" attributes are fixed attributes that are specified in the View instance configuration. "Dynamic" attributes, on the other hand, are values passed in as part of the model.

This is the most convenient way to set static attributes. Note that static attributes can be overridden by dynamic attributes, if a value with the same name is included in the model.

Can be populated with a String "value" (parsed via PropertiesEditor) or a "props" element in XML bean definitions.

See Also

public void setAttributesCSV (String propString)

Set static attributes as a CSV string. Format is: attname0={value1},attname1={value1}

"Static" attributes are fixed attributes that are specified in the View instance configuration. "Dynamic" attributes, on the other hand, are values passed in as part of the model.

public void setAttributesMap (Map<String, ?> attributes)

Set static attributes for this view from a Map. This allows to set any kind of attribute values, for example bean references.

"Static" attributes are fixed attributes that are specified in the View instance configuration. "Dynamic" attributes, on the other hand, are values passed in as part of the model.

Can be populated with a "map" or "props" element in XML bean definitions.

Parameters
attributes Map with name Strings as keys and attribute objects as values

public void setBeanName (String beanName)

Set the view's name. Helpful for traceability.

Framework code must call this when constructing views.

Parameters
beanName the name of the bean in the factory. Note that this name is the actual bean name used in the factory, which may differ from the originally specified name: in particular for inner bean names, the actual bean name might have been made unique through appending "#..." suffixes. Use the BeanFactoryUtils#originalBeanName(String) method to extract the original bean name (without suffix), if desired.

public void setContentType (String contentType)

Set the content type for this view. Default is "text/html;charset=ISO-8859-1".

May be ignored by subclasses if the view itself is assumed to set the content type, e.g. in case of JSPs.

public void setRequestContextAttribute (String requestContextAttribute)

Set the name of the RequestContext attribute for this view. Default is none.

public String toString ()

Protected Methods

protected RequestContext createRequestContext (HttpServletRequest request, HttpServletResponse response, Map<StringObject> model)

Create a RequestContext to expose under the specified attribute name.

Default implementation creates a standard RequestContext instance for the given request and model. Can be overridden in subclasses for custom instances.

Parameters
request current HTTP request
model combined output Map (never null), with dynamic values taking precedence over static attributes
Returns
  • the RequestContext instance

protected ByteArrayOutputStream createTemporaryOutputStream ()

Create a temporary OutputStream for this view.

This is typically used as IE workaround, for setting the content length header from the temporary stream before actually writing the content to the HTTP response.

protected void exposeModelAsRequestAttributes (Map<StringObject> model, HttpServletRequest request)

Expose the model objects in the given map as request attributes. Names will be taken from the model Map. This method is suitable for all resources reachable by javax.servlet.RequestDispatcher.

Parameters
model Map of model objects to expose
request current HTTP request
Throws
Exception

protected boolean generatesDownloadContent ()

Return whether this view generates download content (typically binary content like PDF or Excel files).

The default implementation returns false. Subclasses are encouraged to return true here if they know that they are generating download content that requires temporary caching on the client side, typically via the response OutputStream.

protected void prepareResponse (HttpServletRequest request, HttpServletResponse response)

Prepare the given response for rendering.

The default implementation applies a workaround for an IE bug when sending download content via HTTPS.

Parameters
request current HTTP request
response current HTTP response

protected abstract void renderMergedOutputModel (Map<StringObject> model, HttpServletRequest request, HttpServletResponse response)

Subclasses must implement this method to actually render the view.

The first step will be preparing the request: In the JSP case, this would mean setting model objects as request attributes. The second step will be the actual rendering of the view, for example including the JSP via a RequestDispatcher.

Parameters
model combined output Map (never null), with dynamic values taking precedence over static attributes
request current HTTP request
response current HTTP response
Throws
Exception if rendering failed

protected void writeToResponse (HttpServletResponse response, ByteArrayOutputStream baos)

Write the given temporary OutputStream to the HTTP response.

Parameters
response current HTTP response
baos the temporary OutputStream to write
Throws
IOException if writing/flushing failed