org.springframework.web.servlet.view.xslt
Class AbstractXsltView

java.lang.Object
  extended by org.springframework.context.support.ApplicationObjectSupport
      extended by org.springframework.web.context.support.WebApplicationObjectSupport
          extended by org.springframework.web.servlet.view.AbstractView
              extended by org.springframework.web.servlet.view.xslt.AbstractXsltView
All Implemented Interfaces:
BeanNameAware, ApplicationContextAware, View

public abstract class AbstractXsltView
extends AbstractView

Convenient superclass for views rendered using an XSLT stylesheet. Subclasses must either provide the XML W3C Document or Node to transform by overriding createDomNode(), or provide the Source to transform by overriding createXsltSource().

Note that createXsltSource() is the preferred method which all new subclasses should override since Spring 1.2. createDomNode() has been deprecated and may be removed in a future version.

Subclasses do not need to concern themselves with XSLT other than providing a valid stylesheet location.

Properties:

Note that setting "cache" to "false" will cause the template objects to be reloaded for each rendering. This is useful during development, but will seriously affect performance in production and isn't thread-safe.

Author:
Rod Johnson, Darren Davison, Juergen Hoeller

Field Summary
static String DEFAULT_ROOT
           
 
Fields inherited from class org.springframework.web.servlet.view.AbstractView
DEFAULT_CONTENT_TYPE
 
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
 
Constructor Summary
AbstractXsltView()
           
 
Method Summary
protected  Node createDomNode(Map model, String root, HttpServletRequest request, HttpServletResponse response)
          Deprecated. in favor of createXsltSource(Map, String, HttpServletRequest, HttpServletResponse)
protected  Source createXsltSource(Map model, String root, HttpServletRequest request, HttpServletResponse response)
          Return the XML Source to transform.
protected  void doTransform(Map model, Node dom, HttpServletRequest request, HttpServletResponse response)
          Deprecated. the preferred method is doTransform with a Source argument
protected  void doTransform(Map model, Source source, HttpServletRequest request, HttpServletResponse response)
          Perform the actual transformation, writing to the HTTP response.
protected  void doTransform(Node dom, Map parameters, Result result, String encoding)
          Deprecated. the preferred method is doTransform(Source source, Map parameters, Result result, String encoding)
protected  void doTransform(Source source, Map parameters, Result result, String encoding)
          Perform the actual transformation, writing to the given result.
protected  Map getParameters()
          Return a Map of transformer parameters to be applied to the stylesheet.
protected  Map getParameters(HttpServletRequest request)
          Return a Map of transformer parameters to be applied to the stylesheet.
protected  Source getStylesheetSource(Resource stylesheetLocation)
          Load the stylesheet.
protected  void initApplicationContext()
          Here we load our template, as we need the ApplicationContext to do it.
protected  void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response)
          Subclasses must implement this method to actually render the view.
 void setCache(boolean cache)
          Set whether to activate the cache.
 void setErrorListener(ErrorListener errorListener)
          Set an implementation of the javax.xml.transform.ErrorListener interface for custom handling of transformation errors and warnings.
 void setIndent(boolean indent)
          Set whether the XSLT transformer may add additional whitespace when outputting the result tree.
 void setOutputProperties(Properties outputProperties)
          Set arbitrary transformer output properties to be applied to the stylesheet.
 void setRoot(String root)
          Document root element name.
 void setStylesheetLocation(Resource stylesheetLocation)
          Set the location of the XSLT stylesheet.
 void setUriResolver(URIResolver uriResolver)
          Set the URIResolver used in the transform.
 void setUseSingleModelNameAsRoot(boolean useSingleModelNameAsRoot)
          Set whether to use the name of a given single model object as document root element name.
 
Methods inherited from class org.springframework.web.servlet.view.AbstractView
addStaticAttribute, createRequestContext, getAttributesMap, getBeanName, getContentType, getRequestContextAttribute, getStaticAttributes, render, setAttributes, setAttributesCSV, setAttributesMap, setBeanName, setContentType, setRequestContextAttribute, toString
 
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, isContextRequired
 
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
 

Field Detail

DEFAULT_ROOT

public static final String DEFAULT_ROOT
See Also:
Constant Field Values
Constructor Detail

AbstractXsltView

public AbstractXsltView()
Method Detail

setStylesheetLocation

public void setStylesheetLocation(Resource stylesheetLocation)
Set the location of the XSLT stylesheet.

Parameters:
stylesheetLocation - the location of the XSLT stylesheet
See Also:
ResourceLoader.getResource(java.lang.String)

setRoot

public void setRoot(String root)
Document root element name. Default is "DocRoot". Only used if we're not passed a single Node as model.

Parameters:
root - the document root element name
See Also:
DEFAULT_ROOT

setUseSingleModelNameAsRoot

public void setUseSingleModelNameAsRoot(boolean useSingleModelNameAsRoot)
Set whether to use the name of a given single model object as document root element name.

Default is "true": If you pass in a model with a single object named "myElement", then the document root will be named "myElement" as well. Set this flag to "false" if you want to pass in a single model object while still using the root element name configured through the "root" property.

See Also:
setRoot(java.lang.String)

setUriResolver

public void setUriResolver(URIResolver uriResolver)
Set the URIResolver used in the transform. The URIResolver handles calls to the XSLT document() function. This method can be used by subclasses or as a bean property.

Parameters:
uriResolver - URIResolver to set. No URIResolver will be set if this is null (this is the default).

setErrorListener

public void setErrorListener(ErrorListener errorListener)
Set an implementation of the javax.xml.transform.ErrorListener interface for custom handling of transformation errors and warnings.

If not set, a default SimpleTransformErrorListener is used that simply logs warnings using the logger instance of the view class, and rethrows errors to discontinue the XML transformation.

See Also:
SimpleTransformErrorListener

setIndent

public void setIndent(boolean indent)
Set whether the XSLT transformer may add additional whitespace when outputting the result tree. Default is on; turn this off to not specify an "indent" key, leaving the choice up to the stylesheet.

See Also:
OutputKeys.INDENT

setOutputProperties

public void setOutputProperties(Properties outputProperties)
Set arbitrary transformer output properties to be applied to the stylesheet.

Any values specified here will override defaults that this view sets programmatically.

Parameters:
outputProperties - output properties to apply to the transformation process
See Also:
Transformer.setOutputProperty(java.lang.String, java.lang.String)

setCache

public void setCache(boolean cache)
Set whether to activate the cache. Default is on.


initApplicationContext

protected final void initApplicationContext()
                                     throws ApplicationContextException
Here we load our template, as we need the ApplicationContext to do it.

Overrides:
initApplicationContext in class ApplicationObjectSupport
Throws:
ApplicationContextException - in case of initialization errors
See Also:
ApplicationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext)

getStylesheetSource

protected Source getStylesheetSource(Resource stylesheetLocation)
                              throws ApplicationContextException
Load the stylesheet. Subclasses can override this.

Throws:
ApplicationContextException

renderMergedOutputModel

protected final void renderMergedOutputModel(Map model,
                                             HttpServletRequest request,
                                             HttpServletResponse response)
                                      throws Exception
Description copied from class: AbstractView
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.

Specified by:
renderMergedOutputModel in class AbstractView
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

createXsltSource

protected Source createXsltSource(Map model,
                                  String root,
                                  HttpServletRequest request,
                                  HttpServletResponse response)
                           throws Exception
Return the XML Source to transform. Subclasses must implement either this method or createDomNode, which is retained only for backward compatibility.

Parameters:
model - the model Map
root - name for root element. This can be supplied as a bean property to concrete subclasses within the view definition file, but will be overridden in the case of a single object in the model map to be the key for that object. If no root property is specified and multiple model objects exist, a default root tag name will be supplied.
request - HTTP request. Subclasses won't normally use this, as request processing should have been complete. However, we might to create a RequestContext to expose as part of the model.
response - HTTP response. Subclasses won't normally use this, however there may sometimes be a need to set cookies.
Returns:
the XSLT Source to transform
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions

createDomNode

protected Node createDomNode(Map model,
                             String root,
                             HttpServletRequest request,
                             HttpServletResponse response)
                      throws Exception
Deprecated. in favor of createXsltSource(Map, String, HttpServletRequest, HttpServletResponse)

Return the XML Node to transform.

This method is deprecated from version 1.2 with the preferred extension point being createXsltSource(Map, String, HttpServletRequest, HttpServletResponse) instead. Code that previously implemented this method can now override the preferred method, returning new DOMSource(node) in place of returning node

Parameters:
model - the model Map
root - name for root element. This can be supplied as a bean property to concrete subclasses within the view definition file, but will be overridden in the case of a single object in the model map to be the key for that object. If no root property is specified and multiple model objects exist, a default root tag name will be supplied.
request - HTTP request. Subclasses won't normally use this, as request processing should have been complete. However, we might to create a RequestContext to expose as part of the model.
response - HTTP response. Subclasses won't normally use this, however there may sometimes be a need to set cookies.
Returns:
the XML node to transform
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions

doTransform

protected void doTransform(Map model,
                           Node dom,
                           HttpServletRequest request,
                           HttpServletResponse response)
                    throws Exception
Deprecated. the preferred method is doTransform with a Source argument

Perform the actual transformation, writing to the HTTP response.

Default implementation delegates to the doTransform version that takes a Result argument, building a StreamResult for the ServletResponse OutputStream.

Parameters:
model - the model Map
dom - the XNL node to transform
request - current HTTP request
response - current HTTP response
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions
See Also:
doTransform(Node, Map, Result, String), StreamResult, ServletResponse.getOutputStream(), doTransform(Map, Source, HttpServletRequest, HttpServletResponse), doTransform(java.util.Map, javax.xml.transform.Source, HttpServletRequest, HttpServletResponse)

doTransform

protected void doTransform(Map model,
                           Source source,
                           HttpServletRequest request,
                           HttpServletResponse response)
                    throws Exception
Perform the actual transformation, writing to the HTTP response.

Default implementation delegates to the doTransform version that takes a Result argument, building a StreamResult for the ServletResponse OutputStream.

Parameters:
model - the model Map
source - the Source to transform
request - current HTTP request
response - current HTTP response
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions
See Also:
doTransform(Node, Map, Result, String), StreamResult, ServletResponse.getOutputStream()

doTransform

protected void doTransform(Node dom,
                           Map parameters,
                           Result result,
                           String encoding)
                    throws Exception
Deprecated. the preferred method is doTransform(Source source, Map parameters, Result result, String encoding)

Perform the actual transformation, writing to the given result. Simply delegates to the doTransform(Source, Map, Result, String) version.

Parameters:
dom - the XML node to transform
parameters - a Map of parameters to be applied to the stylesheet
result - the result to write to
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions
See Also:
doTransform(Source, Map, Result, String)

doTransform

protected void doTransform(Source source,
                           Map parameters,
                           Result result,
                           String encoding)
                    throws Exception
Perform the actual transformation, writing to the given result.

Parameters:
source - the Source to transform
parameters - a Map of parameters to be applied to the stylesheet
result - the result to write to
Throws:
Exception - we let this method throw any exception; the AbstractXlstView superclass will catch exceptions

getParameters

protected Map getParameters(HttpServletRequest request)
Return a Map of transformer parameters to be applied to the stylesheet. Subclasses can override this method in order to apply one or more parameters to the transformation process.

Default implementation delegates to simple getParameters version.

Parameters:
request - current HTTP request
Returns:
a Map of parameters to apply to the transformation process
See Also:
getParameters(), Transformer.setParameter(java.lang.String, java.lang.Object)

getParameters

protected Map getParameters()
Return a Map of transformer parameters to be applied to the stylesheet. Subclasses can override this method in order to apply one or more parameters to the transformation process.

Default implementation delegates simply returns null.

Returns:
a Map of parameters to apply to the transformation process
See Also:
getParameters(HttpServletRequest), Transformer.setParameter(java.lang.String, java.lang.Object)


Copyright (c) 2002-2006 The Spring Framework Project.