org.springframework.web.servlet.view
Class UrlBasedViewResolver

java.lang.Object
  extended byorg.springframework.context.support.ApplicationObjectSupport
      extended byorg.springframework.web.context.support.WebApplicationObjectSupport
          extended byorg.springframework.web.servlet.view.AbstractCachingViewResolver
              extended byorg.springframework.web.servlet.view.UrlBasedViewResolver
All Implemented Interfaces:
ApplicationContextAware, ViewResolver
Direct Known Subclasses:
AbstractTemplateViewResolver, InternalResourceViewResolver

public class UrlBasedViewResolver
extends AbstractCachingViewResolver

Simple implementation of ViewResolver that allows for direct resolution of symbolic view names to URLs, without explicit mapping definition. This is appropriate if your symbolic names match the names of your view resources in a straightforward manner, without the need for arbitrary mappings.

Supports AbstractUrlBasedView subclasses like InternalResourceView, VelocityView and FreeMarkerView. The view class for all views generated by this resolver can be specified via the "viewClass" property.

View names can either be resource URLs themselves, or get augmented by a specified prefix and/or suffix. Exporting an attribute that holds the RequestContext to all views is explicitly supported.

Example: prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp"

As a special feature, redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction.do" will trigger a redirect to the given URL, rather than resolution as standard view name. This is typically used for redirecting to a controller URL after finishing a form workflow.

Furthermore, forward URLs can be specified via the "forward:" prefix. E.g.: "forward:myAction.do" will trigger a forward to the given URL, rather than resolution as standard view name. This is typically used for controller URLs; it is not supposed to be used for JSP URLs - use logical view names there.

Note: This class does not support localized resolution, i.e. resolving a symbolic view name to different resources depending on the current locale.

Note: When chaining ViewResolvers, a UrlBasedViewResolver always needs to be last, as it will attempt to resolve any view name, no matter whether the underlying resource actually exists.

Since:
13.12.2003
Author:
Juergen Hoeller
See Also:
setViewClass(java.lang.Class), setPrefix(java.lang.String), setSuffix(java.lang.String), setRequestContextAttribute(java.lang.String), REDIRECT_URL_PREFIX, AbstractUrlBasedView, InternalResourceView, VelocityView, FreeMarkerView

Field Summary
static String FORWARD_URL_PREFIX
          Prefix for special view names that specify a forward URL (usually to a controller after a form has been submitted and processed).
static String REDIRECT_URL_PREFIX
          Prefix for special view names that specify a redirect URL (usually to a controller after a form has been submitted and processed).
 
Fields inherited from class org.springframework.context.support.ApplicationObjectSupport
logger
 
Constructor Summary
UrlBasedViewResolver()
           
 
Method Summary
protected  View createView(String viewName, Locale locale)
          Overridden to implement check for "redirect:" prefix.
 Map getAttributesMap()
          Allow Map access to the static attributes for views returned by this resolver, with the option to add or override specific entries.
protected  String getCacheKey(String viewName, Locale locale)
          This implementation returns just the view name, as this ViewResolver doesn't support localized resolution.
protected  void initApplicationContext()
          Subclasses can override this for custom initialization behavior.
protected  View loadView(String viewName, Locale locale)
          Creates a new instance of the specified view class and configures it.
protected  Class requiredViewClass()
          Return the required type of view for this resolver.
 void setAttributes(Properties props)
          Set static attributes from a java.util.Properties object, for all views returned by this resolver.
 void setAttributesMap(Map attributes)
          Set static attributes from a Map, for all views returned by this resolver.
 void setContentType(String contentType)
          Set the content type for all views.
 void setPrefix(String prefix)
          Set the prefix that gets applied to view names when building a URL.
 void setRedirectContextRelative(boolean redirectContextRelative)
          Set whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.
 void setRedirectHttp10Compatible(boolean redirectHttp10Compatible)
          Set whether redirects should stay compatible with HTTP 1.0 clients.
 void setRequestContextAttribute(String requestContextAttribute)
          Set the name of the RequestContext attribute for all views.
 void setSuffix(String suffix)
          Set the suffix that gets applied to view names when building a URL.
 void setViewClass(Class viewClass)
          Set the view class that should be used to create views.
 
Methods inherited from class org.springframework.web.servlet.view.AbstractCachingViewResolver
isCache, removeFromCache, resolveViewName, setCache
 
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, toString, wait, wait, wait
 

Field Detail

REDIRECT_URL_PREFIX

public static final String REDIRECT_URL_PREFIX
Prefix for special view names that specify a redirect URL (usually to a controller after a form has been submitted and processed). Such view names will not be resolved in the configured default way but rather be treated as special shortcut.

See Also:
Constant Field Values

FORWARD_URL_PREFIX

public static final String FORWARD_URL_PREFIX
Prefix for special view names that specify a forward URL (usually to a controller after a form has been submitted and processed). Such view names will not be resolved in the configured default way but rather be treated as special shortcut.

See Also:
Constant Field Values
Constructor Detail

UrlBasedViewResolver

public UrlBasedViewResolver()
Method Detail

setViewClass

public void setViewClass(Class viewClass)
Set the view class that should be used to create views.

Parameters:
viewClass - class that is assignable to the required view class (by default, AbstractUrlBasedView)
See Also:
AbstractUrlBasedView

requiredViewClass

protected Class requiredViewClass()
Return the required type of view for this resolver. This implementation returns AbstractUrlBasedView.

See Also:
AbstractUrlBasedView

setPrefix

public void setPrefix(String prefix)
Set the prefix that gets applied to view names when building a URL.

Parameters:
prefix - view name prefix

setSuffix

public void setSuffix(String suffix)
Set the suffix that gets applied to view names when building a URL.

Parameters:
suffix - view name suffix

setContentType

public void setContentType(String contentType)
Set the content type for all views. May be ignored by view classes if the view itself is assumed to set the content type, e.g. in case of JSPs.

Parameters:
contentType - the content type

setRedirectContextRelative

public void setRedirectContextRelative(boolean redirectContextRelative)
Set whether to interpret a given redirect URL that starts with a slash ("/") as relative to the current ServletContext, i.e. as relative to the web application root.

Default is true: A redirect URL that starts with a slash will be interpreted as relative to the web application root, i.e. the context path will be prepended to the URL.

Redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction.do"

See Also:
RedirectView.setContextRelative(boolean), REDIRECT_URL_PREFIX

setRedirectHttp10Compatible

public void setRedirectHttp10Compatible(boolean redirectHttp10Compatible)
Set whether redirects should stay compatible with HTTP 1.0 clients.

In the default implementation, this will enforce HTTP status code 302 in any case, i.e. delegate to HttpServletResponse.sendRedirect. Turning this off will send HTTP status code 303, which is the correct code for HTTP 1.1 clients, but not understood by HTTP 1.0 clients.

Many HTTP 1.1 clients treat 302 just like 303, not making any difference. However, some clients depend on 303 when redirecting after a POST request; turn this flag off in such a scenario.

Redirect URLs can be specified via the "redirect:" prefix. E.g.: "redirect:myAction.do"

See Also:
RedirectView.setHttp10Compatible(boolean), REDIRECT_URL_PREFIX

setRequestContextAttribute

public void setRequestContextAttribute(String requestContextAttribute)
Set the name of the RequestContext attribute for all views.

Parameters:
requestContextAttribute - name of the RequestContext attribute
See Also:
AbstractView.setRequestContextAttribute(java.lang.String)

setAttributes

public void setAttributes(Properties props)
Set static attributes from a java.util.Properties object, for all views returned by this resolver.

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:
PropertiesEditor, AbstractView.setAttributes(java.util.Properties)

setAttributesMap

public void setAttributesMap(Map attributes)
Set static attributes from a Map, for all views returned by this resolver. This allows to set any kind of attribute values, for example bean references.

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
See Also:
AbstractView.setAttributesMap(java.util.Map)

getAttributesMap

public Map getAttributesMap()
Allow Map access to the static attributes for views returned by this resolver, 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.


initApplicationContext

protected void initApplicationContext()
Description copied from class: ApplicationObjectSupport
Subclasses can override this for custom initialization behavior. Gets called by setApplicationContext after setting the context instance.

Note: Does not get called on reinitialization of the context but rather just on first initialization of this object's context reference.

Overrides:
initApplicationContext in class ApplicationObjectSupport
See Also:
ApplicationObjectSupport.setApplicationContext(org.springframework.context.ApplicationContext)

getCacheKey

protected String getCacheKey(String viewName,
                             Locale locale)
This implementation returns just the view name, as this ViewResolver doesn't support localized resolution.

Overrides:
getCacheKey in class AbstractCachingViewResolver

createView

protected View createView(String viewName,
                          Locale locale)
                   throws Exception
Overridden to implement check for "redirect:" prefix.

Not possible in loadView, as overridden loadView versions in subclasses might rely on the superclass always creating instances of the required view class.

Overrides:
createView in class AbstractCachingViewResolver
Parameters:
viewName - the name of the view to retrieve
locale - the Locale to retrieve the view for
Returns:
the View instance, or null if not found (optional, to allow for ViewResolver chaining)
Throws:
Exception - if the view couldn't be resolved
See Also:
loadView(java.lang.String, java.util.Locale), requiredViewClass()

loadView

protected View loadView(String viewName,
                        Locale locale)
                 throws BeansException
Creates a new instance of the specified view class and configures it. Does not perform any lookup for pre-defined View instances.

Specified by:
loadView in class AbstractCachingViewResolver
Parameters:
viewName - the name of the view to retrieve
locale - the Locale to retrieve the view for
Returns:
the View instance, or null if not found (optional, to allow for ViewResolver chaining)
Throws:
BeansException
See Also:
AbstractCachingViewResolver.resolveViewName(java.lang.String, java.util.Locale)


Copyright (C) 2003-2004 The Spring Framework Project.