org.springframework.web.reactive.result.view

## 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 Summary

Fields
`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.web.reactive.result.view.ViewResolverSupport

`DEFAULT_CONTENT_TYPE`

### Fields inherited from interface org.springframework.core.Ordered

`HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE`

### Constructor Summary

Constructors
Constructor and Description
`UrlBasedViewResolver()`

### Method Summary

All Methods Instance Methods Concrete Methods
`void` `afterPropertiesSet()`
`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.
`protected boolean` `canHandle(String viewName, Locale locale)` Indicates whether or not this `ViewResolver` can handle the supplied view name.
`protected AbstractUrlBasedView` `createView(String viewName)` Creates a new View instance of the specified view class and configures it.
`org.springframework.context.ApplicationContext` `getApplicationContext()` Return the containing `ApplicationContext`, if any.
`protected String` `getPrefix()` Return the prefix that gets prepended to view names when building a URL.
`protected String` `getRequestContextAttribute()` Return the name of the `RequestContext` attribute for all views, if any.
`protected String` `getSuffix()` Return the suffix that gets appended to view names when building a URL.
`protected Class<?>` `getViewClass()` Return the view class to be used to create views.
`protected String[]` `getViewNames()` Return the view names (or name patterns) that can be handled by this `ViewResolver`.
`protected Class<?>` `requiredViewClass()` Return the required type of view for this resolver.
`reactor.core.publisher.Mono<View>` `resolveViewName(String viewName, Locale locale)` Resolve the view name to a View instance.
`void` `setApplicationContext(org.springframework.context.ApplicationContext applicationContext)` Accept the containing `ApplicationContext`, if any.
`void` `setPrefix(String prefix)` Set the prefix that gets prepended to view names when building a URL.
`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.
`void` `setRequestContextAttribute(String requestContextAttribute)` Set the name of the `RequestContext` attribute for all views.
`void` `setSuffix(String suffix)` Set the suffix that gets appended to view names when building a URL.
`void` `setViewClass(Class<?> viewClass)` Set the view class to instantiate through `createView(String)`.
`void` `setViewNames(String... viewNames)` Set the view names (or name patterns) that can be handled by this `ViewResolver`.

### Methods inherited from class org.springframework.web.reactive.result.view.ViewResolverSupport

`getDefaultCharset, getOrder, getSupportedMediaTypes, setDefaultCharset, setOrder, setSupportedMediaTypes`

### 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

### Constructor Detail

#### UrlBasedViewResolver

    public UrlBasedViewResolver()

### Method Detail

#### setViewClass

    public void setViewClass(@Nullable
                             Class<?> viewClass)

Set the view class to instantiate through `createView(String)`.

Parameters:
  `viewClass` - a class that is assignable to the required view class which by default is AbstractUrlBasedView

#### getViewClass

    @Nullable
    protected Class<?> getViewClass()

Return the view class to be used to create views.

#### requiredViewClass

    protected Class<?> requiredViewClass()

Return the required type of view for this resolver. This implementation returns `AbstractUrlBasedView`.

See Also:
  `AbstractUrlBasedView`

#### 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:
  `canHandle(java.lang.String, java.util.Locale)`

#### 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:
  `AbstractView.setRequestContextAttribute(java.lang.String)`

#### 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:
  `setViewClass(java.lang.Class<?>)`, `createView(java.lang.String)`, `applyLifecycleMethods(java.lang.String, org.springframework.web.reactive.result.view.AbstractUrlBasedView)`

#### getApplicationContext

    @Nullable
    public org.springframework.context.ApplicationContext getApplicationContext()

Return the containing `ApplicationContext`, if any.

See Also:
  `setApplicationContext(org.springframework.context.ApplicationContext)`

#### 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 or not 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)`

#### 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:
  `getViewClass()`, `applyLifecycleMethods(java.lang.String, org.springframework.web.reactive.result.view.AbstractUrlBasedView)`

#### 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)`