Class ModelFactory
- java.lang.Object
- org.springframework.web.method.annotation.ModelFactory
public final class ModelFactory extends Object
Assist with initialization of theModelbefore 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
@ModelAttributemethods.On update model attributes are synchronized with the session and also
BindingResultattributes are added if missing.- Since:
- 3.1
- Author:
- Rossen Stoyanchev
Constructor Summary
Constructors Constructor Description ModelFactory(List<InvocableHandlerMethod> handlerMethods, WebDataBinderFactory binderFactory, SessionAttributesHandler attributeHandler)Create a new instance with the given@ModelAttributemethods.
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static StringgetNameForParameter(MethodParameter parameter)Derive the model attribute name for the given method parameter based on a@ModelAttributeparameter annotation (if present) or falling back on parameter type based conventions.static StringgetNameForReturnValue(Object returnValue, MethodParameter returnType)Derive the model attribute name for the given return value.voidinitModel(NativeWebRequest request, ModelAndViewContainer container, HandlerMethod handlerMethod)Populate the model in the following order: Retrieve "known" session attributes listed as@SessionAttributes.voidupdateModel(NativeWebRequest request, ModelAndViewContainer container)Promote model attributes listed as@SessionAttributesto the session.
Constructor Detail
ModelFactory
public ModelFactory(@Nullable List<InvocableHandlerMethod> handlerMethods, WebDataBinderFactory binderFactory, SessionAttributesHandler attributeHandler)
Create a new instance with the given@ModelAttributemethods.- Parameters:
handlerMethods- the@ModelAttributemethods to invokebinderFactory- for preparation ofBindingResultattributesattributeHandler- for access to session attributes
Method Detail
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
@ModelAttributemethods - Find
@ModelAttributemethod arguments also listed as@SessionAttributesand 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@ModelAttributemethods
- Retrieve "known" session attributes listed as
updateModel
public void updateModel(NativeWebRequest request, ModelAndViewContainer container) throws Exception
Promote model attributes listed as@SessionAttributesto the session. AddBindingResultattributes where necessary.- Parameters:
request- the current requestcontainer- contains the model to update- Throws:
Exception- if creating BindingResult attributes fails
getNameForParameter
public static String getNameForParameter(MethodParameter parameter)
Derive the model attribute name for the given method parameter based on a@ModelAttributeparameter 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:
Conventions.getVariableNameForParameter(MethodParameter)
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
ModelAttributeannotation 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
nullor empty String)
- the method