类 UrlBasedViewResolver

java.lang.Object
cn.taketoday.context.support.ApplicationObjectSupport
cn.taketoday.web.view.AbstractCachingViewResolver
cn.taketoday.web.view.UrlBasedViewResolver
所有已实现的接口:
cn.taketoday.beans.factory.Aware, cn.taketoday.context.ApplicationContextAware, cn.taketoday.core.Ordered, ViewResolver
直接已知子类:
AbstractTemplateViewResolver, InternalResourceViewResolver, ScriptTemplateViewResolver, XsltViewResolver

public class UrlBasedViewResolver extends AbstractCachingViewResolver implements cn.taketoday.core.Ordered
Simple implementation of the ViewResolver interface, allowing for direct resolution of symbolic view names to URLs, without explicit mapping definitions. This is useful if your symbolic names match the names of your view resources in a straightforward manner (i.e. the symbolic name is the unique part of the resource's filename), without the need for a dedicated mapping to be defined for each view.

Supports AbstractUrlBasedView subclasses like InternalResourceView 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" 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" 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 will check whether the specified resource actually exists. However, with InternalResourceView, it is not generally possible to determine the existence of the target resource upfront. In such a scenario, a UrlBasedViewResolver will always return a View for any given view name; as a consequence, it should be configured as the last ViewResolver in the chain.

从以下版本开始:
4.0
作者:
Juergen Hoeller, Rob Harrop, Sam Brannen
另请参阅:
  • 字段详细资料

    • 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.
      另请参阅:
    • 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.
      另请参阅:
    • viewClass

      @Nullable private Class<?> viewClass
    • prefix

      private String prefix
    • suffix

      private String suffix
    • contentType

      @Nullable private String contentType
    • redirectContextRelative

      private boolean redirectContextRelative
    • redirectHttp10Compatible

      private boolean redirectHttp10Compatible
    • requestContextAttribute

      @Nullable private String requestContextAttribute
    • staticAttributes

      private final Map<String,Object> staticAttributes
      Map of static attributes, keyed by attribute name (String).
    • exposePathVariables

      @Nullable private Boolean exposePathVariables
    • exposeContextBeansAsAttributes

      @Nullable private Boolean exposeContextBeansAsAttributes
    • exposedContextBeanNames

      @Nullable private String[] exposedContextBeanNames
    • viewNames

      @Nullable private String[] viewNames
    • order

      private int order
    • exposeOutputRedirectModel

      private boolean exposeOutputRedirectModel
  • 构造器详细资料

    • UrlBasedViewResolver

      public UrlBasedViewResolver()
  • 方法详细资料

    • setViewClass

      public void setViewClass(@Nullable Class<?> viewClass)
      Set the view class that should be used to create views.
      参数:
      viewClass - a class that is assignable to the required view class (by default: AbstractUrlBasedView)
      另请参阅:
    • getViewClass

      @Nullable protected Class<?> getViewClass()
      Return the view class to be used to create views.
      另请参阅:
    • setPrefix

      public void setPrefix(@Nullable String prefix)
      Set the prefix that gets prepended to view names when building a URL.
    • getPrefix

      protected String getPrefix()
      Return the prefix that gets prepended to view names when building a URL.
    • setSuffix

      public void setSuffix(@Nullable String suffix)
      Set the suffix that gets appended to view names when building a URL.
    • getSuffix

      protected String getSuffix()
      Return the suffix that gets appended to view names when building a URL.
    • setContentType

      public void setContentType(@Nullable 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.

    • getContentType

      @Nullable protected String getContentType()
      Return the content type for all views, if any.
    • 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"

      另请参阅:
    • isRedirectContextRelative

      protected boolean isRedirectContextRelative()
      Return 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.
    • 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"

      另请参阅:
    • isRedirectHttp10Compatible

      protected boolean isRedirectHttp10Compatible()
      Return whether redirects should stay compatible with HTTP 1.0 clients.
    • setRequestContextAttribute

      public void setRequestContextAttribute(@Nullable String requestContextAttribute)
      Set the name of the RequestContext attribute for all views.
      参数:
      requestContextAttribute - name of the RequestContext attribute
      另请参阅:
    • getRequestContextAttribute

      @Nullable protected String getRequestContextAttribute()
      Return the name of the RequestContext attribute for all views, if any.
    • 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.

      另请参阅:
    • setAttributesMap

      public void setAttributesMap(@Nullable Map<String,?> 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.

      参数:
      attributes - a Map with name Strings as keys and attribute objects as values
      另请参阅:
    • getAttributesMap

      public Map<String,Object> 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.

    • setExposePathVariables

      public void setExposePathVariables(@Nullable Boolean exposePathVariables)
      Specify whether views resolved by this resolver should add path variables to the model or not.

      The default setting is to let each View decide (see AbstractView.setExposePathVariables(boolean)). However, you can use this property to override that.

      参数:
      exposePathVariables -
      • true - all Views resolved by this resolver will expose path variables
      • false - no Views resolved by this resolver will expose path variables
      • null - individual Views can decide for themselves (this is used by default)
      另请参阅:
    • getExposePathVariables

      @Nullable protected Boolean getExposePathVariables()
      Return whether views resolved by this resolver should add path variables to the model or not.
    • setExposeContextBeansAsAttributes

      public void setExposeContextBeansAsAttributes(boolean exposeContextBeansAsAttributes)
      Set whether to make all Framework beans in the application context accessible as request attributes, through lazy checking once an attribute gets accessed.

      This will make all such beans accessible in plain ${...} expressions in a JSP 2.0 page, as well as in JSTL's c:out value expressions.

      Default is "false".

      另请参阅:
    • getExposeContextBeansAsAttributes

      @Nullable protected Boolean getExposeContextBeansAsAttributes()
    • setExposedContextBeanNames

      public void setExposedContextBeanNames(@Nullable String... exposedContextBeanNames)
      Specify the names of beans in the context which are supposed to be exposed. If this is non-null, only the specified beans are eligible for exposure as attributes.
      另请参阅:
    • getExposedContextBeanNames

      @Nullable protected String[] getExposedContextBeanNames()
    • setViewNames

      public void setViewNames(@Nullable String... viewNames)
      Set the view names (or name patterns) that can be handled by this ViewResolver. View names can contain simple wildcards such that 'my*', '*Report' and '*Repo*' will all match the view name 'myReport'.
      另请参阅:
    • getViewNames

      @Nullable protected String[] getViewNames()
      Return the view names (or name patterns) that can be handled by this ViewResolver.
    • setExposeOutputRedirectModel

      public void setExposeOutputRedirectModel(boolean exposeOutputRedirectModel)
      set exposeOutputRedirectModel to determine if all 'output' RedirectModel should be put into model
      参数:
      exposeOutputRedirectModel - If true, all 'output' RedirectModel will be put to current view
      另请参阅:
    • setOrder

      public void setOrder(int order)
      Specify the order value for this ViewResolver bean.

      The default value is Ordered.LOWEST_PRECEDENCE, meaning non-ordered.

      另请参阅:
      • Ordered.getOrder()
    • getOrder

      public int getOrder()
      指定者:
      getOrder 在接口中 cn.taketoday.core.Ordered
    • initApplicationContext

      protected void initApplicationContext()
      覆盖:
      initApplicationContext 在类中 cn.taketoday.context.support.ApplicationObjectSupport
    • getCacheKey

      protected Object getCacheKey(String viewName, Locale locale)
      This implementation returns just the view name, as this ViewResolver doesn't support localized resolution.
      覆盖:
      getCacheKey 在类中 AbstractCachingViewResolver
    • createView

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

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

      覆盖:
      createView 在类中 AbstractCachingViewResolver
      参数:
      viewName - the name of the view to retrieve
      locale - the Locale to retrieve the view for
      返回:
      the View instance, or null if not found (optional, to allow for ViewResolver chaining)
      抛出:
      Exception - if the view couldn't be resolved
      另请参阅:
    • canHandle

      protected boolean canHandle(String viewName, Locale locale)
      Indicates whether or not this ViewResolver can handle the supplied view name. If not, createView(String, Locale) will return null. The default implementation checks against the configured view names.
      参数:
      viewName - the name of the view to retrieve
      locale - the Locale to retrieve the view for
      返回:
      whether this resolver applies to the specified view
      另请参阅:
      • StringUtils.simpleMatch(String, String)
    • requiredViewClass

      protected Class<?> requiredViewClass()
      Return the required type of view for this resolver. This implementation returns AbstractUrlBasedView.
      另请参阅:
    • instantiateView

      protected AbstractUrlBasedView instantiateView()
      Instantiate the specified view class.

      The default implementation uses reflection to instantiate the class.

      返回:
      a new instance of the view class
      另请参阅:
    • loadView

      protected View loadView(String viewName, Locale locale) throws Exception
      Delegates to buildView for creating a new instance of the specified view class. Applies the following Framework lifecycle methods (as supported by the generic Framework bean factory):
      • ApplicationContextAware's setApplicationContext
      • InitializingBean's afterPropertiesSet
      指定者:
      loadView 在类中 AbstractCachingViewResolver
      参数:
      viewName - the name of the view to retrieve
      locale - the Locale to retrieve the view for
      返回:
      the View instance
      抛出:
      Exception - if the view couldn't be resolved
      另请参阅:
      • buildView(String)
      • ApplicationContextAware.setApplicationContext(cn.taketoday.context.ApplicationContext)
      • InitializingBean.afterPropertiesSet()
    • buildView

      protected AbstractUrlBasedView buildView(String viewName) throws Exception
      Creates a new View instance of the specified view class and configures it. Does not perform any lookup for pre-defined View instances.

      Framework lifecycle methods as defined by the bean container do not have to be called here; those will be applied by the loadView method after this method returns.

      Subclasses will typically call super.buildView(viewName) first, before setting further properties themselves. loadView will then apply Framework lifecycle methods at the end of this process.

      参数:
      viewName - the name of the view to build
      返回:
      the View instance
      抛出:
      Exception - if the view couldn't be resolved
      另请参阅:
    • applyLifecycleMethods

      protected View applyLifecycleMethods(String viewName, AbstractUrlBasedView view)
      Apply the containing ApplicationContext's lifecycle methods to the given View instance, if such a context is available.
      参数:
      viewName - the name of the view
      view - the freshly created View instance, pre-configured with AbstractUrlBasedView's properties
      返回:
      the View instance to use (either the original one or a decorated variant)
      另请参阅:
      • ApplicationObjectSupport.getApplicationContext()
      • ApplicationContext.getAutowireCapableBeanFactory()
      • AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String)