Class ModelFactory
java.lang.Object
org.springframework.web.method.annotation.ModelFactory
Assist with initialization of the
Model
before controller method
invocation and with updates to it after the invocation.
On initialization the model is populated with attributes temporarily stored
in the session and through the invocation of @ModelAttribute
methods.
On update model attributes are synchronized with the session and also
BindingResult
attributes are added if missing.
- Since:
- 3.1
- Author:
- Rossen Stoyanchev
-
Constructor Summary
ConstructorDescriptionModelFactory
(List<InvocableHandlerMethod> handlerMethods, WebDataBinderFactory binderFactory, SessionAttributesHandler attributeHandler) Create a new instance with the given@ModelAttribute
methods. -
Method Summary
Modifier and TypeMethodDescriptionstatic String
getNameForParameter
(MethodParameter parameter) Derive the model attribute name for the given method parameter based on a@ModelAttribute
parameter annotation (if present) or falling back on parameter type based conventions.static String
getNameForReturnValue
(Object returnValue, MethodParameter returnType) Derive the model attribute name for the given return value.void
initModel
(NativeWebRequest request, ModelAndViewContainer container, HandlerMethod handlerMethod) Populate the model in the following order: Retrieve "known" session attributes listed as@SessionAttributes
.void
updateModel
(NativeWebRequest request, ModelAndViewContainer container) Promote model attributes listed as@SessionAttributes
to the session.
-
Constructor Details
-
ModelFactory
public ModelFactory(@Nullable List<InvocableHandlerMethod> handlerMethods, WebDataBinderFactory binderFactory, SessionAttributesHandler attributeHandler) Create a new instance with the given@ModelAttribute
methods.- Parameters:
handlerMethods
- the@ModelAttribute
methods to invokebinderFactory
- for preparation ofBindingResult
attributesattributeHandler
- for access to session attributes
-
-
Method Details
-
initModel
public void initModel(NativeWebRequest request, ModelAndViewContainer container, HandlerMethod handlerMethod) throws Exception Populate the model in the following order:- Retrieve "known" session attributes listed as
@SessionAttributes
. - Invoke
@ModelAttribute
methods - Find
@ModelAttribute
method arguments also listed as@SessionAttributes
and ensure they're present in the model raising an exception if necessary.
- Parameters:
request
- the current requestcontainer
- a container with the model to be initializedhandlerMethod
- the method for which the model is initialized- Throws:
Exception
- may arise from@ModelAttribute
methods
- Retrieve "known" session attributes listed as
-
updateModel
Promote model attributes listed as@SessionAttributes
to the session. AddBindingResult
attributes where necessary.- Parameters:
request
- the current requestcontainer
- contains the model to update- Throws:
Exception
- if creating BindingResult attributes fails
-
getNameForParameter
Derive the model attribute name for the given method parameter based on a@ModelAttribute
parameter annotation (if present) or falling back on parameter type based conventions.- Parameters:
parameter
- a descriptor for the method parameter- Returns:
- the derived name
- See Also:
-
getNameForReturnValue
public static String getNameForReturnValue(@Nullable Object returnValue, MethodParameter returnType) Derive the model attribute name for the given return value. Results will be based on:- the method
ModelAttribute
annotation value - the declared return type if it is more specific than
Object
- the actual return value type
- Parameters:
returnValue
- the value returned from a method invocationreturnType
- a descriptor for the return type of the method- Returns:
- the derived name (never
null
or empty String)
- the method
-