org.springframework.web.servlet.support
Class RequestContext

java.lang.Object
  extended byorg.springframework.web.servlet.support.RequestContext
Direct Known Subclasses:
JspAwareRequestContext

public class RequestContext
extends Object

Context holder for request-specific state, like current web application context, current locale, current theme, and potential binding errors. Provides easy access to localized messages and Errors instances.

Suitable for exposition to views, and usage within JSP's "useBean" tag, JSP scriptlets, JSTL EL, Velocity templates, etc. Necessary for views that do not have access to the servlet request, like Velocity templates.

Can be instantiated manually, or automatically exposed to views as model attribute via AbstractView's "requestContextAttribute" property.

Will also work outside DispatcherServlet requests, accessing the root WebApplicationContext and using an appropriate fallback for the locale (the JSTL locale if available, or the HttpServletRequest locale else).

Since:
03.03.2003
Author:
Juergen Hoeller
See Also:
DispatcherServlet, AbstractView.setRequestContextAttribute(java.lang.String), UrlBasedViewResolver.setRequestContextAttribute(java.lang.String), getFallbackLocale()

Field Summary
protected static String APPLICATION_SCOPE_SUFFIX
           
static String DEFAULT_THEME_NAME
          Default theme name used if the RequestContext cannot find a ThemeResolver.
static String JSTL_LOCALE_ATTRIBUTE
          JSTL locale attribute, as used by JSTL implementations to expose their current locale.
protected static String REQUEST_SCOPE_SUFFIX
           
protected static String SESSION_SCOPE_SUFFIX
           
 
Constructor Summary
protected RequestContext()
           
  RequestContext(HttpServletRequest request)
          Create a new RequestContext for the given request, using the request attributes for Errors retrieval.
  RequestContext(HttpServletRequest request, Map model)
          Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.
  RequestContext(HttpServletRequest request, ServletContext servletContext)
          Create a new RequestContext for the given request, using the request attributes for Errors retrieval.
  RequestContext(HttpServletRequest request, ServletContext servletContext, Map model)
          Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.
 
Method Summary
 BindStatus getBindStatus(String path)
          Create a BindStatus for the given bind object, using the defaultHtmlEscape setting.
 BindStatus getBindStatus(String path, boolean htmlEscape)
          Create a BindStatus for the given bind object, using the defaultHtmlEscape setting.
 String getContextPath()
          Return the context path of the current request, i.e. the path that indicates the current web application.
 Errors getErrors(String name)
          Retrieve the Errors instance for the given bind object, using the defaultHtmlEscape setting.
 Errors getErrors(String name, boolean htmlEscape)
          Retrieve the Errors instance for the given bind object.
protected  Locale getFallbackLocale()
          Determine the fallback locale for this context.
protected  Theme getFallbackTheme()
          Determine the fallback theme for this context.
 Locale getLocale()
          Return the current locale.
 String getMessage(MessageSourceResolvable resolvable)
          Retrieve the given MessageSourceResolvable (e.g. an ObjectError instance), using the defaultHtmlEscape setting.
 String getMessage(MessageSourceResolvable resolvable, boolean htmlEscape)
          Retrieve the given MessageSourceResolvable (e.g. an ObjectError instance).
 String getMessage(String code)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
 String getMessage(String code, List args)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
 String getMessage(String code, List args, String defaultMessage)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
 String getMessage(String code, Object[] args)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
 String getMessage(String code, Object[] args, boolean htmlEscape)
          Retrieve the message for the given code.
 String getMessage(String code, Object[] args, String defaultMessage)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
 String getMessage(String code, Object[] args, String defaultMessage, boolean htmlEscape)
          Retrieve the message for the given code.
 String getMessage(String code, String defaultMessage)
          Retrieve the message for the given code, using the defaultHtmlEscape setting.
protected  Object getModelObject(String modelName)
          Retrieve the model object for the given model name, either from the model or from the request attributes.
protected  HttpServletRequest getRequest()
          Return the underlying HttpServletRequest.
 String getRequestUri()
          Return the request URI of the current request, i.e. the invoked URL without parameters.
protected  ServletContext getServletContext()
          Return the underlying ServletContext.
 Theme getTheme()
          Return the current theme.
 String getThemeMessage(MessageSourceResolvable resolvable)
          Retrieve the given MessageSourceResolvable in the current theme.
 String getThemeMessage(String code)
          Retrieve the theme message for the given code.
 String getThemeMessage(String code, List args)
          Retrieve the theme message for the given code.
 String getThemeMessage(String code, List args, String defaultMessage)
          Retrieve the theme message for the given code.
 String getThemeMessage(String code, Object[] args)
          Retrieve the theme message for the given code.
 String getThemeMessage(String code, Object[] args, String defaultMessage)
          Retrieve the theme message for the given code.
 String getThemeMessage(String code, String defaultMessage)
          Retrieve the theme message for the given code.
 UrlPathHelper getUrlPathHelper()
          Return the UrlPathHelper used for context path and request URI decoding.
 WebApplicationContext getWebApplicationContext()
          Return the current WebApplicationContext.
protected  void initContext(HttpServletRequest request, ServletContext servletContext, Map model)
          Initialize this context with the given request, using the given model attributes for Errors retrieval.
 boolean isDefaultHtmlEscape()
          Is default HTML escaping active?
 void setDefaultHtmlEscape(boolean defaultHtmlEscape)
          (De)activate default HTML escaping for messages and errors, for the scope of this RequestContext.
 void setUrlPathHelper(UrlPathHelper urlPathHelper)
          Set the UrlPathHelper to use for context path and request URI decoding.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

DEFAULT_THEME_NAME

public static final String DEFAULT_THEME_NAME
Default theme name used if the RequestContext cannot find a ThemeResolver. Only applies to non-DispatcherServlet requests.

Same as AbstractThemeResolver's default, but not linked in here to avoid package interdependencies.

See Also:
AbstractThemeResolver.ORIGINAL_DEFAULT_THEME_NAME, Constant Field Values

JSTL_LOCALE_ATTRIBUTE

public static final String JSTL_LOCALE_ATTRIBUTE
JSTL locale attribute, as used by JSTL implementations to expose their current locale. Used as fallback in non-DispatcherServlet requests; if not available, the accept-header locale is used (request.getLocaleSame as the FMT_LOCALE constant in JSTL's Config class, but not linked in here to avoid a hard-coded dependency on JSTL. RequestContext does not depend on JSTL except for this fallback check of JSTL's locale attribute.

See Also:
Config.FMT_LOCALE, ServletRequest.getLocale(), Constant Field Values

REQUEST_SCOPE_SUFFIX

protected static final String REQUEST_SCOPE_SUFFIX
See Also:
Constant Field Values

SESSION_SCOPE_SUFFIX

protected static final String SESSION_SCOPE_SUFFIX
See Also:
Constant Field Values

APPLICATION_SCOPE_SUFFIX

protected static final String APPLICATION_SCOPE_SUFFIX
See Also:
Constant Field Values
Constructor Detail

RequestContext

public RequestContext(HttpServletRequest request)
Create a new RequestContext for the given request, using the request attributes for Errors retrieval.

This only works with InternalResourceViews, as Errors instances are part of the model and not normally exposed as request attributes. It will typically be used within JSPs or custom tags.

Will only work within a DispatcherServlet request. Pass in a ServletContext to be able to fallback to the root WebApplicationContext.

Parameters:
request - current HTTP request
See Also:
DispatcherServlet, RequestContext(javax.servlet.http.HttpServletRequest, javax.servlet.ServletContext)

RequestContext

public RequestContext(HttpServletRequest request,
                      ServletContext servletContext)
Create a new RequestContext for the given request, using the request attributes for Errors retrieval.

This only works with InternalResourceViews, as Errors instances are part of the model and not normally exposed as request attributes. It will typically be used within JSPs or custom tags.

If a ServletContext is specified, the RequestContext will also work with the root WebApplicationContext (outside a DispatcherServlet).

Parameters:
request - current HTTP request
servletContext - the servlet context of the web application (can be null; necessary for fallback to root WebApplicationContext)
See Also:
WebApplicationContext, DispatcherServlet

RequestContext

public RequestContext(HttpServletRequest request,
                      Map model)
Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.

This works with all View implementations. It will typically be used by View implementations.

Will only work within a DispatcherServlet request. Pass in a ServletContext to be able to fallback to the root WebApplicationContext.

Parameters:
request - current HTTP request
model - the model attributes for the current view (can be null, using the request attributes for Errors retrieval)
See Also:
DispatcherServlet, RequestContext(javax.servlet.http.HttpServletRequest, javax.servlet.ServletContext, Map)

RequestContext

public RequestContext(HttpServletRequest request,
                      ServletContext servletContext,
                      Map model)
Create a new RequestContext for the given request, using the given model attributes for Errors retrieval.

This works with all View implementations. It will typically be used by View implementations.

If a ServletContext is specified, the RequestContext will also work with a root WebApplicationContext (outside a DispatcherServlet).

Parameters:
request - current HTTP request
servletContext - the servlet context of the web application (can be null; necessary for fallback to root WebApplicationContext)
model - the model attributes for the current view (can be null, using the request attributes for Errors retrieval)
See Also:
WebApplicationContext, DispatcherServlet

RequestContext

protected RequestContext()
Method Detail

initContext

protected void initContext(HttpServletRequest request,
                           ServletContext servletContext,
                           Map model)
Initialize this context with the given request, using the given model attributes for Errors retrieval.

Delegates to getFallbackLocale and getFallbackTheme for determining the fallback locale and theme, respectively, if no LocaleResolver and/or ThemeResolver can be found in the request.

Parameters:
request - current HTTP request
servletContext - the servlet context of the web application (can be null; necessary for fallback to root WebApplicationContext)
model - the model attributes for the current view (can be null, using the request attributes for Errors retrieval)
See Also:
getFallbackLocale(), getFallbackTheme(), DispatcherServlet.LOCALE_RESOLVER_ATTRIBUTE, DispatcherServlet.THEME_RESOLVER_ATTRIBUTE

getFallbackLocale

protected Locale getFallbackLocale()
Determine the fallback locale for this context.

Default implementation checks for a JSTL locale attribute in request, session or application scope; if not found, returns the HttpServletRequest.getLocale().

Returns:
the fallback locale (never null)
See Also:
ServletRequest.getLocale()

getFallbackTheme

protected Theme getFallbackTheme()
Determine the fallback theme for this context.

Default implementation returns the default theme (with name "theme").

Returns:
the fallback theme (never null)

getRequest

protected final HttpServletRequest getRequest()
Return the underlying HttpServletRequest. Only intended for cooperating classes in this package.


getWebApplicationContext

public final WebApplicationContext getWebApplicationContext()
Return the current WebApplicationContext.


getServletContext

protected final ServletContext getServletContext()
Return the underlying ServletContext. Only intended for cooperating classes in this package.


getLocale

public final Locale getLocale()
Return the current locale.


getTheme

public final Theme getTheme()
Return the current theme.


setDefaultHtmlEscape

public void setDefaultHtmlEscape(boolean defaultHtmlEscape)
(De)activate default HTML escaping for messages and errors, for the scope of this RequestContext. The default is the application-wide setting (the "defaultHtmlEscape" context-param in web.xml).

See Also:
WebUtils.isDefaultHtmlEscape(javax.servlet.ServletContext)

isDefaultHtmlEscape

public boolean isDefaultHtmlEscape()
Is default HTML escaping active?


setUrlPathHelper

public void setUrlPathHelper(UrlPathHelper urlPathHelper)
Set the UrlPathHelper to use for context path and request URI decoding. Can be used to pass a shared UrlPathHelper instance in.

A default UrlPathHelper is always available.


getUrlPathHelper

public UrlPathHelper getUrlPathHelper()
Return the UrlPathHelper used for context path and request URI decoding. Can be used to configure the current UrlPathHelper.

A default UrlPathHelper is always available.


getContextPath

public String getContextPath()
Return the context path of the current request, i.e. the path that indicates the current web application.

Delegates to the UrlPathHelper for decoding.

See Also:
HttpServletRequest.getContextPath(), getUrlPathHelper()

getRequestUri

public String getRequestUri()
Return the request URI of the current request, i.e. the invoked URL without parameters. This is particularly useful as HTML form action target.

Note that you should create your RequestContext instance before forwarding to your JSP view, if you intend to determine the request URI! The optimal way to do so is to set "requestContextAttribute" on your view. Else, you'll get the URI of your JSP rather than the one of your controller.

Side note: As alternative for an HTML form action, either specify an empty "action" or omit the "action" attribute completely. This is not covered by the HTML spec, though, but known to work reliably on all current browsers.

Delegates to the UrlPathHelper for decoding.

See Also:
HttpServletRequest.getRequestURI(), getUrlPathHelper(), AbstractView.setRequestContextAttribute(java.lang.String), UrlBasedViewResolver.setRequestContextAttribute(java.lang.String)

getMessage

public String getMessage(String code,
                         String defaultMessage)
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
defaultMessage - String to return if the lookup fails
Returns:
the message

getMessage

public String getMessage(String code,
                         Object[] args,
                         String defaultMessage)
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
args - arguments for the message, or null if none
defaultMessage - String to return if the lookup fails
Returns:
the message

getMessage

public String getMessage(String code,
                         List args,
                         String defaultMessage)
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
args - arguments for the message as a List, or null if none
defaultMessage - String to return if the lookup fails
Returns:
the message

getMessage

public String getMessage(String code,
                         Object[] args,
                         String defaultMessage,
                         boolean htmlEscape)
Retrieve the message for the given code.

Parameters:
code - code of the message
args - arguments for the message, or null if none
defaultMessage - String to return if the lookup fails
htmlEscape - HTML escape the message?
Returns:
the message

getMessage

public String getMessage(String code)
                  throws NoSuchMessageException
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
Returns:
the message
Throws:
NoSuchMessageException - if not found

getMessage

public String getMessage(String code,
                         Object[] args)
                  throws NoSuchMessageException
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
args - arguments for the message, or null if none
Returns:
the message
Throws:
NoSuchMessageException - if not found

getMessage

public String getMessage(String code,
                         List args)
                  throws NoSuchMessageException
Retrieve the message for the given code, using the defaultHtmlEscape setting.

Parameters:
code - code of the message
args - arguments for the message as a List, or null if none
Returns:
the message
Throws:
NoSuchMessageException - if not found

getMessage

public String getMessage(String code,
                         Object[] args,
                         boolean htmlEscape)
                  throws NoSuchMessageException
Retrieve the message for the given code.

Parameters:
code - code of the message
args - arguments for the message, or null if none
htmlEscape - HTML escape the message?
Returns:
the message
Throws:
NoSuchMessageException - if not found

getMessage

public String getMessage(MessageSourceResolvable resolvable)
                  throws NoSuchMessageException
Retrieve the given MessageSourceResolvable (e.g. an ObjectError instance), using the defaultHtmlEscape setting.

Parameters:
resolvable - the MessageSourceResolvable
Returns:
the message
Throws:
NoSuchMessageException - if not found

getMessage

public String getMessage(MessageSourceResolvable resolvable,
                         boolean htmlEscape)
                  throws NoSuchMessageException
Retrieve the given MessageSourceResolvable (e.g. an ObjectError instance).

Parameters:
resolvable - the MessageSourceResolvable
htmlEscape - HTML escape the message?
Returns:
the message
Throws:
NoSuchMessageException - if not found

getThemeMessage

public String getThemeMessage(String code,
                              String defaultMessage)
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
defaultMessage - String to return if the lookup fails
Returns:
the message

getThemeMessage

public String getThemeMessage(String code,
                              Object[] args,
                              String defaultMessage)
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
args - arguments for the message, or null if none
defaultMessage - String to return if the lookup fails
Returns:
the message

getThemeMessage

public String getThemeMessage(String code,
                              List args,
                              String defaultMessage)
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
args - arguments for the message as a List, or null if none
defaultMessage - String to return if the lookup fails
Returns:
the message

getThemeMessage

public String getThemeMessage(String code)
                       throws NoSuchMessageException
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
Returns:
the message
Throws:
NoSuchMessageException - if not found

getThemeMessage

public String getThemeMessage(String code,
                              Object[] args)
                       throws NoSuchMessageException
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
args - arguments for the message, or null if none
Returns:
the message
Throws:
NoSuchMessageException - if not found

getThemeMessage

public String getThemeMessage(String code,
                              List args)
                       throws NoSuchMessageException
Retrieve the theme message for the given code.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
code - code of the message
args - arguments for the message as a List, or null if none
Returns:
the message
Throws:
NoSuchMessageException - if not found

getThemeMessage

public String getThemeMessage(MessageSourceResolvable resolvable)
                       throws NoSuchMessageException
Retrieve the given MessageSourceResolvable in the current theme.

Note that theme messages are never HTML-escaped, as they typically denote theme-specific resource paths and not client-visible messages.

Parameters:
resolvable - the MessageSourceResolvable
Returns:
the message
Throws:
NoSuchMessageException - if not found

getErrors

public Errors getErrors(String name)
Retrieve the Errors instance for the given bind object, using the defaultHtmlEscape setting.

Parameters:
name - name of the bind object
Returns:
the Errors instance, or null if not found

getErrors

public Errors getErrors(String name,
                        boolean htmlEscape)
Retrieve the Errors instance for the given bind object.

Parameters:
name - name of the bind object
htmlEscape - create an Errors instance with automatic HTML escaping?
Returns:
the Errors instance, or null if not found

getModelObject

protected Object getModelObject(String modelName)
Retrieve the model object for the given model name, either from the model or from the request attributes.

Parameters:
modelName - the name of the model object
Returns:
the model object

getBindStatus

public BindStatus getBindStatus(String path)
                         throws IllegalStateException
Create a BindStatus for the given bind object, using the defaultHtmlEscape setting.

Parameters:
path - the bean and property path for which values and errors will be resolved (e.g. "person.age")
Returns:
the new BindStatus instance
Throws:
IllegalStateException - if no corresponding Errors object found

getBindStatus

public BindStatus getBindStatus(String path,
                                boolean htmlEscape)
                         throws IllegalStateException
Create a BindStatus for the given bind object, using the defaultHtmlEscape setting.

Parameters:
path - the bean and property path for which values and errors will be resolved (e.g. "person.age")
htmlEscape - create a BindStatus with automatic HTML escaping?
Returns:
the new BindStatus instance
Throws:
IllegalStateException - if no corresponding Errors object found


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