public abstract class AbstractView extends Object implements View, BeanNameAware, ApplicationContextAware
View
implementations.Modifier and Type | Field and Description |
---|---|
protected Log |
logger
Logger that is available to subclasses.
|
static String |
REQUEST_DATA_VALUE_PROCESSOR_BEAN_NAME
Well-known name for the RequestDataValueProcessor in the bean factory.
|
Constructor and Description |
---|
AbstractView() |
AbstractView(ReactiveAdapterRegistry reactiveAdapterRegistry) |
Modifier and Type | Method and Description |
---|---|
protected RequestContext |
createRequestContext(ServerWebExchange exchange,
Map<String,Object> model)
Create a RequestContext to expose under the specified attribute name.
|
protected String |
formatViewName() |
ApplicationContext |
getApplicationContext() |
String |
getBeanName()
Return the view's name.
|
Charset |
getDefaultCharset()
Return the default charset, used when the
content type does not contain one.
|
protected reactor.core.publisher.Mono<Map<String,Object>> |
getModelAttributes(Map<String,?> model,
ServerWebExchange exchange)
Prepare the model to use for rendering.
|
String |
getRequestContextAttribute()
Return the name of the RequestContext attribute, if any.
|
protected RequestDataValueProcessor |
getRequestDataValueProcessor()
Return the
RequestDataValueProcessor to use. |
List<MediaType> |
getSupportedMediaTypes()
Return the configured media types supported by this view.
|
protected ApplicationContext |
obtainApplicationContext()
Obtain the ApplicationContext for actual use.
|
reactor.core.publisher.Mono<Void> |
render(Map<String,?> model,
MediaType contentType,
ServerWebExchange exchange)
Prepare the model to render.
|
protected abstract reactor.core.publisher.Mono<Void> |
renderInternal(Map<String,Object> renderAttributes,
MediaType contentType,
ServerWebExchange exchange)
Subclasses must implement this method to actually render the view.
|
protected reactor.core.publisher.Mono<Void> |
resolveAsyncAttributes(Map<String,Object> model)
By default, resolve async attributes supported by the
ReactiveAdapterRegistry to their blocking counterparts. |
void |
setApplicationContext(ApplicationContext applicationContext)
Set the ApplicationContext that this object runs in.
|
void |
setBeanName(String beanName)
Set the view's name.
|
void |
setDefaultCharset(Charset defaultCharset)
Set the default charset for this view, used when the
content type does not contain one.
|
void |
setRequestContextAttribute(String requestContextAttribute)
Set the name of the RequestContext attribute for this view.
|
void |
setSupportedMediaTypes(List<MediaType> supportedMediaTypes)
Set the supported media types for this view.
|
String |
toString() |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
isRedirectView
public static final String REQUEST_DATA_VALUE_PROCESSOR_BEAN_NAME
protected final Log logger
public AbstractView()
public AbstractView(ReactiveAdapterRegistry reactiveAdapterRegistry)
public void setSupportedMediaTypes(List<MediaType> supportedMediaTypes)
public List<MediaType> getSupportedMediaTypes()
getSupportedMediaTypes
in interface View
public void setDefaultCharset(Charset defaultCharset)
public Charset getDefaultCharset()
public void setRequestContextAttribute(@Nullable String requestContextAttribute)
@Nullable public String getRequestContextAttribute()
public void setBeanName(@Nullable String beanName)
Framework code must call this when constructing views.
setBeanName
in interface BeanNameAware
beanName
- the name of the bean in the factory.
Note that this name is the actual bean name used in the factory, which may
differ from the originally specified name: in particular for inner bean
names, the actual bean name might have been made unique through appending
"#..." suffixes. Use the BeanFactoryUtils.originalBeanName(String)
method to extract the original bean name (without suffix), if desired.@Nullable public String getBeanName()
null
, if the view was
correctly configured.public void setApplicationContext(@Nullable ApplicationContext applicationContext)
ApplicationContextAware
Invoked after population of normal bean properties but before an init callback such
as InitializingBean.afterPropertiesSet()
or a custom init-method. Invoked after ResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
,
ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
and
MessageSourceAware
, if applicable.
setApplicationContext
in interface ApplicationContextAware
applicationContext
- the ApplicationContext object to be used by this objectBeanInitializationException
@Nullable public ApplicationContext getApplicationContext()
protected final ApplicationContext obtainApplicationContext()
null
)IllegalStateException
- in case of no ApplicationContext setpublic reactor.core.publisher.Mono<Void> render(@Nullable Map<String,?> model, @Nullable MediaType contentType, ServerWebExchange exchange)
render
in interface View
model
- a Map with name Strings as keys and corresponding model
objects as values (Map can also be null
in case of empty model)contentType
- the content type selected to render with which should
match one of the supported media types
.exchange
- the current exchangeMono
to represent when and if rendering succeedsprotected reactor.core.publisher.Mono<Map<String,Object>> getModelAttributes(@Nullable Map<String,?> model, ServerWebExchange exchange)
The default implementation creates a combined output Map that includes model as well as static attributes with the former taking precedence.
protected reactor.core.publisher.Mono<Void> resolveAsyncAttributes(Map<String,Object> model)
ReactiveAdapterRegistry
to their blocking counterparts.
View implementations capable of taking advantage of reactive types can override this method if needed.
Mono
for the completion of async attributes resolutionprotected RequestContext createRequestContext(ServerWebExchange exchange, Map<String,Object> model)
The default implementation creates a standard RequestContext instance for the given request and model. Can be overridden in subclasses for custom instances.
exchange
- current exchangemodel
- combined output Map (never null
),
with dynamic values taking precedence over static attributessetRequestContextAttribute(java.lang.String)
@Nullable protected RequestDataValueProcessor getRequestDataValueProcessor()
RequestDataValueProcessor
to use.
The default implementation looks in the Spring configuration
for a RequestDataValueProcessor
bean with
the name REQUEST_DATA_VALUE_PROCESSOR_BEAN_NAME
.
protected abstract reactor.core.publisher.Mono<Void> renderInternal(Map<String,Object> renderAttributes, @Nullable MediaType contentType, ServerWebExchange exchange)
renderAttributes
- combined output Map (never null
),
with dynamic values taking precedence over static attributescontentType
- the content type selected to render with which should
match one of the supported media types
.exchange
- current exchange @return Mono
to represent when
and if rendering succeedsprotected String formatViewName()