public final class ModelFactory extends Object
Model before controller method
invocation and to update it afterwards.
On initialization, the model is populated with attributes from the session
and by invoking methods annotated with @ModelAttribute.
On update, model attributes are synchronized with the session and also
BindingResult attributes are added where missing.
| Constructor and Description |
|---|
ModelFactory(List<InvocableHandlerMethod> invocableMethods,
WebDataBinderFactory dataBinderFactory,
SessionAttributesHandler sessionAttributesHandler)
Create a new instance with the given
@ModelAttribute methods. |
| Modifier and Type | Method and Description |
|---|---|
static String |
getNameForParameter(MethodParameter parameter)
Derives the model attribute name for a method parameter based on:
The parameter
@ModelAttribute annotation value
The parameter type
|
static String |
getNameForReturnValue(Object returnValue,
MethodParameter returnType)
Derive the model attribute name for the given return value using one of:
The method
ModelAttribute annotation value
The declared return type if it is more specific than Object
The actual return value type
|
void |
initModel(NativeWebRequest request,
ModelAndViewContainer mavContainer,
HandlerMethod handlerMethod)
Populate the model in the following order:
Retrieve "known" session attributes listed as
@SessionAttributes. |
void |
updateModel(NativeWebRequest request,
ModelAndViewContainer mavContainer)
Promote model attributes listed as
@SessionAttributes to the session. |
public ModelFactory(List<InvocableHandlerMethod> invocableMethods, WebDataBinderFactory dataBinderFactory, SessionAttributesHandler sessionAttributesHandler)
@ModelAttribute methods.invocableMethods - the @ModelAttribute methods to invokedataBinderFactory - for preparation of BindingResult attributessessionAttributesHandler - for access to session attributespublic void initModel(NativeWebRequest request, ModelAndViewContainer mavContainer, HandlerMethod handlerMethod) throws Exception
@SessionAttributes.
@ModelAttribute methods
@ModelAttribute method arguments also listed as
@SessionAttributes and ensure they're present in the model raising
an exception if necessary.
request - the current requestmavContainer - a container with the model to be initializedhandlerMethod - the method for which the model is initializedException - may arise from @ModelAttribute methodspublic static String getNameForParameter(MethodParameter parameter)
@ModelAttribute annotation value
null or an empty stringpublic static String getNameForReturnValue(Object returnValue, MethodParameter returnType)
ModelAttribute annotation value
Object
returnValue - the value returned from a method invocationreturnType - the return type of the methodnull nor emptypublic void updateModel(NativeWebRequest request, ModelAndViewContainer mavContainer) throws Exception
@SessionAttributes to the session.
Add BindingResult attributes where necessary.request - the current requestmavContainer - contains the model to updateException - if creating BindingResult attributes fails