Class UrlBasedViewResolver

java.lang.Object
org.springframework.web.reactive.result.view.ViewResolverSupport
org.springframework.web.reactive.result.view.UrlBasedViewResolver
All Implemented Interfaces:
org.springframework.beans.factory.Aware, org.springframework.beans.factory.InitializingBean, org.springframework.context.ApplicationContextAware, org.springframework.core.Ordered, ViewResolver
Direct Known Subclasses:
FreeMarkerViewResolver, ScriptTemplateViewResolver

public class UrlBasedViewResolver extends ViewResolverSupport implements ViewResolver, org.springframework.context.ApplicationContextAware, org.springframework.beans.factory.InitializingBean
A ViewResolver that allows direct resolution of symbolic view names to URLs without explicit mapping definitions. This is useful if symbolic names match the names of 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 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="templates/", suffix=".ftl", viewname="test" → "templates/test.ftl"

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.

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

Since:
5.0
Author:
Rossen Stoyanchev, Sebastien Deleuze, Juergen Hoeller, Sam Brannen
  • Field Details

    • 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:
  • Constructor Details

    • UrlBasedViewResolver

      public UrlBasedViewResolver()
  • Method Details

    • setViewClass

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

      @Nullable protected Class<?> getViewClass()
      Return the view class to be used to create views.
      See Also:
    • 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.
    • 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'.
      See Also:
    • getViewNames

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

      public void setRedirectViewProvider(Function<String,RedirectView> redirectViewProvider)
      URL based RedirectView provider which can be used to provide, for example, redirect views with a custom default status code.
    • setRequestContextAttribute

      public void setRequestContextAttribute(@Nullable String requestContextAttribute)
      Set the name of the RequestContext attribute for all views.
      Parameters:
      requestContextAttribute - name of the RequestContext attribute
      See Also:
    • getRequestContextAttribute

      @Nullable protected String getRequestContextAttribute()
      Return the name of the RequestContext attribute for all views, if any.
    • setApplicationContext

      public void setApplicationContext(@Nullable org.springframework.context.ApplicationContext applicationContext)
      Accept the containing ApplicationContext, if any.

      To be used for the initialization of newly created View instances, applying lifecycle callbacks and providing access to the containing environment.

      Specified by:
      setApplicationContext in interface org.springframework.context.ApplicationContextAware
      See Also:
    • getApplicationContext

      @Nullable public org.springframework.context.ApplicationContext getApplicationContext()
      Return the containing ApplicationContext, if any.
      See Also:
    • afterPropertiesSet

      public void afterPropertiesSet() throws Exception
      Specified by:
      afterPropertiesSet in interface org.springframework.beans.factory.InitializingBean
      Throws:
      Exception
    • resolveViewName

      public reactor.core.publisher.Mono<View> resolveViewName(String viewName, Locale locale)
      Description copied from interface: ViewResolver
      Resolve the view name to a View instance.
      Specified by:
      resolveViewName in interface ViewResolver
      Parameters:
      viewName - the name of the view to resolve
      locale - the locale for the request
      Returns:
      the resolved view or an empty stream
    • canHandle

      protected boolean canHandle(String viewName, Locale locale)
      Indicates whether this ViewResolver can handle the supplied view name. If not, an empty result is returned. The default implementation checks against the configured view names.
      Parameters:
      viewName - the name of the view to retrieve
      locale - the Locale to retrieve the view for
      Returns:
      whether this resolver applies to the specified view
      See Also:
      • PatternMatchUtils.simpleMatch(String, String)
    • requiredViewClass

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

      protected AbstractUrlBasedView instantiateView()
      Instantiate the specified view class.

      The default implementation uses reflection to instantiate the class.

      Returns:
      a new instance of the view class
      Since:
      5.3
      See Also:
    • createView

      protected AbstractUrlBasedView createView(String viewName)
      Creates a new View instance of the specified view class and configures it.

      Does not perform any lookup for pre-defined View instances.

      Spring lifecycle methods as defined by the bean container do not have to be called here: They will be automatically applied afterwards, provided that an ApplicationContext is available.

      Parameters:
      viewName - the name of the view to build
      Returns:
      the View instance
      See Also:
    • 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.
      Parameters:
      viewName - the name of the view
      view - the freshly created View instance, pre-configured with AbstractUrlBasedView's properties
      Returns:
      the View instance to use (either the original one or a decorated variant)
      See Also:
      • getApplicationContext()
      • ApplicationContext.getAutowireCapableBeanFactory()
      • AutowireCapableBeanFactory.initializeBean(java.lang.Object, java.lang.String)