org.springframework.web.servlet.view
Class JstlView

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.AbstractUrlBasedView
                  extended by org.springframework.web.servlet.view.InternalResourceView
                      extended by org.springframework.web.servlet.view.JstlView
All Implemented Interfaces:
Aware, BeanNameAware, InitializingBean, ApplicationContextAware, ServletContextAware, View

public class JstlView
extends InternalResourceView

Specialization of InternalResourceView for JSTL pages, i.e. JSP pages that use the JSP Standard Tag Library.

Exposes JSTL-specific request attributes specifying locale and resource bundle for JSTL's formatting and message tags, using Spring's locale and MessageSource.

Typical usage with InternalResourceViewResolver would look as follows, from the perspective of the DispatcherServlet context definition:

 <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
   <property name="prefix" value="/WEB-INF/jsp/"/>
   <property name="suffix" value=".jsp"/>
 </bean>

 <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
   <property name="basename" value="messages"/>
 </bean>
Every view name returned from a handler will be translated to a JSP resource (for example: "myView" -> "/WEB-INF/jsp/myView.jsp"), using this view class to enable explicit JSTL support.

The specified MessageSource loads messages from "messages.properties" etc files in the class path. This will automatically be exposed to views as JSTL localization context, which the JSTL fmt tags (message etc) will use. Consider using Spring's ReloadableResourceBundleMessageSource instead of the standard ResourceBundleMessageSource for more sophistication. Of course, any other Spring components can share the same MessageSource.

This is a separate class mainly to avoid JSTL dependencies in InternalResourceView itself. JSTL has not been part of standard J2EE up until J2EE 1.4, so we can't assume the JSTL API jar to be available on the class path.

Hint: Set the InternalResourceView.setExposeContextBeansAsAttributes(boolean) flag to "true" in order to make all Spring beans in the application context accessible within JSTL expressions (e.g. in a c:out value expression). This will also make all such beans accessible in plain ${...} expressions in a JSP 2.0 page.

Since:
27.02.2003
Author:
Juergen Hoeller
See Also:
JstlUtils.exposeLocalizationContext(javax.servlet.http.HttpServletRequest, org.springframework.context.MessageSource), InternalResourceViewResolver, ResourceBundleMessageSource, ReloadableResourceBundleMessageSource

Field Summary
 
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
 
Constructor Summary
JstlView()
          Constructor for use as a bean.
JstlView(String url)
          Create a new JstlView with the given URL.
JstlView(String url, MessageSource messageSource)
          Create a new JstlView with the given URL.
 
Method Summary
protected  void exposeHelpers(HttpServletRequest request)
          Exposes a JSTL LocalizationContext for Spring's locale and MessageSource.
protected  void initServletContext(ServletContext servletContext)
          Wraps the MessageSource with a JSTL-aware MessageSource that is aware of JSTL's javax.servlet.jsp.jstl.fmt.localizationContext context-param.
 
Methods inherited from class org.springframework.web.servlet.view.InternalResourceView
exposeForwardRequestAttributes, getRequestDispatcher, getRequestToExpose, isContextRequired, prepareForRendering, renderMergedOutputModel, setAlwaysInclude, setExposeContextBeansAsAttributes, setExposedContextBeanNames, setExposeForwardAttributes, setPreventDispatchLoop, useInclude
 
Methods inherited from class org.springframework.web.servlet.view.AbstractUrlBasedView
afterPropertiesSet, checkResource, 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, writeToResponse
 
Methods inherited from class org.springframework.web.context.support.WebApplicationObjectSupport
getServletContext, getTempDir, getWebApplicationContext, initApplicationContext, setServletContext
 
Methods inherited from class org.springframework.context.support.ApplicationObjectSupport
getApplicationContext, getMessageSourceAccessor, initApplicationContext, requiredContextClass, setApplicationContext
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

JstlView

public JstlView()
Constructor for use as a bean.

See Also:
AbstractUrlBasedView.setUrl(java.lang.String)

JstlView

public JstlView(String url)
Create a new JstlView with the given URL.

Parameters:
url - the URL to forward to

JstlView

public JstlView(String url,
                MessageSource messageSource)
Create a new JstlView with the given URL.

Parameters:
url - the URL to forward to
messageSource - the MessageSource to expose to JSTL tags (will be wrapped with a JSTL-aware MessageSource that is aware of JSTL's javax.servlet.jsp.jstl.fmt.localizationContext context-param)
See Also:
JstlUtils.getJstlAwareMessageSource(javax.servlet.ServletContext, org.springframework.context.MessageSource)
Method Detail

initServletContext

protected void initServletContext(ServletContext servletContext)
Wraps the MessageSource with a JSTL-aware MessageSource that is aware of JSTL's javax.servlet.jsp.jstl.fmt.localizationContext context-param.

Overrides:
initServletContext in class InternalResourceView
Parameters:
servletContext - the ServletContext that this application object runs in (never null)
See Also:
JstlUtils.getJstlAwareMessageSource(javax.servlet.ServletContext, org.springframework.context.MessageSource)

exposeHelpers

protected void exposeHelpers(HttpServletRequest request)
                      throws Exception
Exposes a JSTL LocalizationContext for Spring's locale and MessageSource.

Overrides:
exposeHelpers in class InternalResourceView
Parameters:
request - current HTTP request
Throws:
Exception - if there's a fatal error while we're adding attributes
See Also:
JstlUtils.exposeLocalizationContext(javax.servlet.http.HttpServletRequest, org.springframework.context.MessageSource)