private WebDataBinder resolveModelAttribute(String attrName,
MethodParameter methodParam,
ExtendedModelMap implicitModel, NativeWebRequest webRequest,
Object handler) throws Exception {
if ("".equals(attrName)) {
attrName = Conventions.getVariableNameForParameter(methodParam);
}
Class paramType = methodParam.getParameterType();
if (!implicitModel.containsKey(attrName) &&
this.methodResolver.isSessionAttribute(attrName, paramType)) {
Object sessionAttr = this.sessionAttributeStore.retrieveAttribute(
webRequest, attrName);
if (sessionAttr == null) {
raiseSessionRequiredException("Session attribute '" + attrName +
"' required - not found in session");
}
implicitModel.addAttribute(attrName, sessionAttr);
}
Object bindObject = implicitModel.get(attrName);
if (bindObject == null) {
bindObject = BeanUtils.instantiateClass(paramType);
}
WebDataBinder binder = createBinder(webRequest, bindObject, attrName);
initBinder(handler, attrName, binder, webRequest);
return binder;
}