List of usage examples for org.springframework.web.bind WebDataBinder getBindingResult
public BindingResult getBindingResult()
From source file:org.opentides.web.processor.FormBindMethodProcessor.java
/** * Resolve the argument from the model or if not found instantiate it with * its default. The model attribute is then populated with request values * via data binding and validated. If no validation error, the model * is retrieved from database and merged with the submitted form. * /*from ww w . j av a2 s. c o m*/ * @throws BindException if data binding and validation result in an error * @throws Exception if WebDataBinder initialization fails. */ @SuppressWarnings("unchecked") public final Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest nativeRequest, WebDataBinderFactory binderFactory) throws Exception { FormBind annot = parameter.getParameterAnnotation(FormBind.class); Class<?> clazz = parameter.getDeclaringClass(); String name = getName(annot, parameter); HttpServletRequest request = (HttpServletRequest) nativeRequest.getNativeRequest(); Method addForm = CacheUtil.getNewFormBindMethod(clazz); Object controller = beanFactory.getBean(parameter.getContainingClass()); Object target = (addForm != null) ? addForm.invoke(controller, request) : BeanUtils.instantiateClass(parameter.getParameterType()); MutablePropertyValues mpvs = new MutablePropertyValues(nativeRequest.getParameterMap()); WebDataBinder binder = binderFactory.createBinder(nativeRequest, target, name); if (binder.getTarget() != null) { binder.bind(mpvs); if (binder.getValidator() != null) binder.validate(); if (binder.getBindingResult().hasErrors()) { throw new BindException(binder.getBindingResult()); } String method = request.getMethod().toLowerCase(); // id should be the last segment of the uri String uri = request.getRequestURI(); String sid = uri.substring(uri.lastIndexOf("/") + 1); Long id = StringUtil.convertToLong(sid, 0); // if target extends BaseEntity and for update, link target to database record if (("put".equals(method) || "post".equals(method)) && id > 0 && BaseEntity.class.isAssignableFrom(parameter.getParameterType())) { // now retrieve record from database for updating Method updateForm = CacheUtil.getUpdateFormBindMethod(clazz); BaseEntity record = null; if (updateForm == null) { // no annotation, invoke from service Method getService = controller.getClass().getMethod("getService"); if (getService == null) { String message = "Cannot find method with @FormBind with update mode. " + "Also, unable to find service associated to controller." + "Please specify one that retrieves record from database."; throw new InvalidImplementationException(message); } BaseCrudService<? extends BaseEntity> service = (BaseCrudService<? extends BaseEntity>) getService .invoke(controller); record = (BaseEntity) service.load(sid); } else { // with annotation, invoke annotation record = (BaseEntity) updateForm.invoke(controller, sid, request); } if (record != null) { WebDataBinder updateBinder = binderFactory.createBinder(nativeRequest, record, name); updateBinder.bind(mpvs); mavContainer.addAllAttributes(updateBinder.getBindingResult().getModel()); return updateBinder.getTarget(); } else { String message = "Unable to find " + parameter.getParameterType().getSimpleName() + " with id=" + sid + " for update."; throw new DataAccessException(message); } } else if ("post".equals(method)) { mavContainer.addAllAttributes(binder.getBindingResult().getModel()); return binder.getTarget(); } else { throw new InvalidImplementationException( "@FormBind argument annotation can only be used on POST or PUT methods."); } } mavContainer.addAllAttributes(binder.getBindingResult().getModel()); return binder.getTarget(); }
From source file:com.virtusa.akura.school.controller.SchoolController.java
/** * Registers the given custom property editor for all properties of the Date type. * /*from w w w .j a v a 2 s.c o m*/ * @param binder - data binder used to register the Date objects. */ @InitBinder public final void initBinder(final WebDataBinder binder) { binder.getBindingResult(); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }
From source file:com.virtusa.akura.staff.controller.ClassTeacherController.java
/** * Registers the given custom property editor for all properties of the Date type. * * @param binder - data binder used to register the Date objects. *//*from w ww. j a v a 2 s.c om*/ @InitBinder public void initBinder(WebDataBinder binder) { binder.getBindingResult(); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }
From source file:com.virtusa.akura.common.controller.ManageSpecialEventsController.java
/** * intiBinder method is to bind date class with the date format. * /*from ww w . ja v a2 s. c o m*/ * @param binder - data binder used to register the Date objects. */ @InitBinder public void initBinder(final WebDataBinder binder) { binder.getBindingResult(); SimpleDateFormat dateFormat = new SimpleDateFormat(DEFALUT_DATE_FORMAT); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }
From source file:org.zht.framework.web.bind.resolver.FormModelMethodArgumentResolver.java
/** * Resolve the argument from the model or if not found instantiate it with * its default if it is available. The model attribute is then populated * with request values via data binding and optionally validated * if {@code @java.validation.Valid} is present on the argument. * * @throws org.springframework.validation.BindException * if data binding and validation result in an error * and the next method parameter is not of type {@link org.springframework.validation.Errors}. * @throws Exception if WebDataBinder initialization fails. *//*from w ww. ja v a2 s .com*/ public final Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request, WebDataBinderFactory binderFactory) throws Exception { String name = parameter.getParameterAnnotation(FormModel.class).value(); Object target = (mavContainer.containsAttribute(name)) ? mavContainer.getModel().get(name) : createAttribute(name, parameter, binderFactory, request); WebDataBinder binder = binderFactory.createBinder(request, target, name); target = binder.getTarget(); if (target != null) { bindRequestParameters(mavContainer, binderFactory, binder, request, parameter); validateIfApplicable(binder, parameter); if (binder.getBindingResult().hasErrors()) { List<BindingResult> list = (List<BindingResult>) request .getAttribute(ValidateConstant.BINDING_RESULT_LIST_NAME, Integer.MAX_VALUE / 2 + 1); if (null == list) { list = new ArrayList<BindingResult>(); request.setAttribute(ValidateConstant.BINDING_RESULT_LIST_NAME, list, 0); } list.add(binder.getBindingResult()); request.setAttribute(ValidateConstant.BINDING_RESULT_HAS_ERROR, true, 0); // if (isBindExceptionRequired(binder, parameter)) { // throw new BindException(binder.getBindingResult()); // } } } target = binder.convertIfNecessary(binder.getTarget(), parameter.getParameterType()); mavContainer.addAttribute(name, target); return target; }
From source file:com.fengduo.bee.commons.component.FormModelMethodArgumentResolver.java
/** * Resolve the argument from the model or if not found instantiate it with its default if it is available. The model * attribute is then populated with request values via data binding and optionally validated if * {@code @java.validation.Valid} is present on the argument. * /*from www.j av a 2 s . co m*/ * @throws org.springframework.validation.BindException if data binding and validation result in an error and the * next method parameter is not of type {@link org.springframework.validation.Errors}. * @throws Exception if WebDataBinder initialization fails. */ public final Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request, WebDataBinderFactory binderFactory) throws Exception { String name = parameter.getParameterAnnotation(FormBean.class).value(); Object target = (mavContainer.containsAttribute(name)) ? mavContainer.getModel().get(name) : createAttribute(name, parameter, binderFactory, request); WebDataBinder binder = binderFactory.createBinder(request, target, name); target = binder.getTarget(); if (target != null) { bindRequestParameters(mavContainer, binderFactory, binder, request, parameter); validateIfApplicable(binder, parameter); if (binder.getBindingResult().hasErrors()) { if (isBindExceptionRequired(binder, parameter)) { throw new BindException(binder.getBindingResult()); } } } target = binder.convertIfNecessary(binder.getTarget(), parameter.getParameterType()); mavContainer.addAttribute(name, target); return target; }
From source file:de.iew.web.isc.spring.IscRequestMethodArgumentResolver.java
public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception { DSRequest dsRequest = new DSRequest(); WebDataBinder binder = webDataBinderFactory.createBinder(nativeWebRequest, dsRequest, "dsRequest"); binder.setFieldMarkerPrefix("__"); // Man kann noch eigene Property Editoren konfigurieren //binder.registerCustomEditor(); if (binder instanceof ServletRequestDataBinder) { /*// ww w. j a v a 2 s. com @TODO Wir machen es uns etwas leicht. Unser DSRequest Objekt muss eigentlich nur die isc_-Eigenschaften kennen. Dort ist auch isc_metaDataPreifx konfiguriert. Anhand dieses Prefix mssen wir die anderen Eiegenschaften auflsen. */ ServletRequestDataBinder servletRequestDataBinder = (ServletRequestDataBinder) binder; HttpServletRequest request = (HttpServletRequest) nativeWebRequest.getNativeRequest(); servletRequestDataBinder.bind(request); BindingResult bindingResult = binder.getBindingResult(); modelAndViewContainer.addAttribute(BindingResult.MODEL_KEY_PREFIX + "dsRequest", bindingResult); return dsRequest; } else { throw new UnsupportedOperationException( "Using " + binder.getClass() + " WebDataBinder is not supported."); } }
From source file:org.zht.framework.web.bind.resolver.FormModelMethodArgumentResolver.java
/** * {@inheritDoc}/*w w w. j a va 2 s.c om*/ * <p>Downcast {@link org.springframework.web.bind.WebDataBinder} to {@link org.springframework.web.bind.ServletRequestDataBinder} before binding. * * @throws Exception * @see org.springframework.web.servlet.mvc.method.annotation.ServletRequestDataBinderFactory */ protected void bindRequestParameters(ModelAndViewContainer mavContainer, WebDataBinderFactory binderFactory, WebDataBinder binder, NativeWebRequest request, MethodParameter parameter) throws Exception { Map<String, Boolean> hasProcessedPrefixMap = new HashMap<String, Boolean>(); Class<?> targetType = binder.getTarget().getClass(); ServletRequest servletRequest = prepareServletRequest(binder.getTarget(), request, parameter); WebDataBinder simpleBinder = binderFactory.createBinder(request, null, null); if (Collection.class.isAssignableFrom(targetType)) {//bind collection or array Type type = parameter.getGenericParameterType(); Class<?> componentType = Object.class; Collection target = (Collection) binder.getTarget(); List targetList = new ArrayList(target); if (type instanceof ParameterizedType) { componentType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]; } if (parameter.getParameterType().isArray()) { componentType = parameter.getParameterType().getComponentType(); } for (Object key : servletRequest.getParameterMap().keySet()) { String prefixName = getPrefixName((String) key); //?prefix ?? if (hasProcessedPrefixMap.containsKey(prefixName)) { continue; } else { hasProcessedPrefixMap.put(prefixName, Boolean.TRUE); } if (isSimpleComponent(prefixName)) { //bind simple type Map<String, Object> paramValues = WebUtils.getParametersStartingWith(servletRequest, prefixName); Matcher matcher = INDEX_PATTERN.matcher(prefixName); if (!matcher.matches()) { //? array=1&array=2 for (Object value : paramValues.values()) { targetList.add(simpleBinder.convertIfNecessary(value, componentType)); } } else { //? array[0]=1&array[1]=2 int index = Integer.valueOf(matcher.group(1)); if (targetList.size() <= index) { growCollectionIfNecessary(targetList, index); } targetList.set(index, simpleBinder.convertIfNecessary(paramValues.values(), componentType)); } } else { //? votes[1].title=votes[1].title&votes[0].title=votes[0].title&votes[0].id=0&votes[1].id=1 Object component = null; //? ????? Matcher matcher = INDEX_PATTERN.matcher(prefixName); if (!matcher.matches()) { throw new IllegalArgumentException("bind collection error, need integer index, key:" + key); } int index = Integer.valueOf(matcher.group(1)); if (targetList.size() <= index) { growCollectionIfNecessary(targetList, index); } Iterator iterator = targetList.iterator(); for (int i = 0; i < index; i++) { iterator.next(); } component = iterator.next(); if (component == null) { component = BeanUtils.instantiate(componentType); } WebDataBinder componentBinder = binderFactory.createBinder(request, component, null); component = componentBinder.getTarget(); if (component != null) { ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues( servletRequest, prefixName, ""); componentBinder.bind(pvs); validateIfApplicable(componentBinder, parameter); if (componentBinder.getBindingResult().hasErrors()) { if (isBindExceptionRequired(componentBinder, parameter)) { throw new BindException(componentBinder.getBindingResult()); } } targetList.set(index, component); } } target.clear(); target.addAll(targetList); } } else if (MapWapper.class.isAssignableFrom(targetType)) { Type type = parameter.getGenericParameterType(); Class<?> keyType = Object.class; Class<?> valueType = Object.class; if (type instanceof ParameterizedType) { keyType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[0]; valueType = (Class<?>) ((ParameterizedType) type).getActualTypeArguments()[1]; } MapWapper mapWapper = ((MapWapper) binder.getTarget()); Map target = mapWapper.getInnerMap(); if (target == null) { target = new HashMap(); mapWapper.setInnerMap(target); } for (Object key : servletRequest.getParameterMap().keySet()) { String prefixName = getPrefixName((String) key); //?prefix ?? if (hasProcessedPrefixMap.containsKey(prefixName)) { continue; } else { hasProcessedPrefixMap.put(prefixName, Boolean.TRUE); } Object keyValue = simpleBinder.convertIfNecessary(getMapKey(prefixName), keyType); if (isSimpleComponent(prefixName)) { //bind simple type Map<String, Object> paramValues = WebUtils.getParametersStartingWith(servletRequest, prefixName); for (Object value : paramValues.values()) { target.put(keyValue, simpleBinder.convertIfNecessary(value, valueType)); } } else { Object component = target.get(keyValue); if (component == null) { component = BeanUtils.instantiate(valueType); } WebDataBinder componentBinder = binderFactory.createBinder(request, component, null); component = componentBinder.getTarget(); if (component != null) { ServletRequestParameterPropertyValues pvs = new ServletRequestParameterPropertyValues( servletRequest, prefixName, ""); componentBinder.bind(pvs); validateComponent(componentBinder, parameter); target.put(keyValue, component); } } } } else {//bind model ServletRequestDataBinder servletBinder = (ServletRequestDataBinder) binder; servletBinder.bind(servletRequest); } }
From source file:com.fengduo.bee.commons.component.FormModelMethodArgumentResolver.java
protected void validateComponent(WebDataBinder binder, MethodParameter parameter) throws BindException { boolean validateParameter = validateParameter(parameter); Annotation[] annotations = binder.getTarget().getClass().getAnnotations(); for (Annotation annot : annotations) { if (annot.annotationType().getSimpleName().startsWith("Valid") && validateParameter) { Object hints = AnnotationUtils.getValue(annot); binder.validate(hints instanceof Object[] ? (Object[]) hints : new Object[] { hints }); }/*w ww .j ava 2 s.co m*/ } if (binder.getBindingResult().hasErrors()) { if (isBindExceptionRequired(binder, parameter)) { throw new BindException(binder.getBindingResult()); } } }
From source file:com.virtusa.akura.student.controller.StudentTemporaryLeaveController.java
/** * intiBinder method is to bind date class with the date format. * * @param binder - data binder used to register the Date objects. *///from w w w. ja v a 2 s . com @InitBinder public void initBinder(final WebDataBinder binder) { binder.getBindingResult(); SimpleDateFormat dateFormat = new SimpleDateFormat(YYYY_MM_DD); binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true)); }