List of usage examples for org.springframework.web.bind.support WebDataBinderFactory createBinder
WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName)
throws Exception;
From source file:com.trenako.web.infrastructure.SearchRequestArgumentResolverTests.java
@Test public void shouldResolveRequestAsSearchRequest() throws Exception { HttpServletRequest request = new MockHttpServletRequest(); ((MockHttpServletRequest) request).setRequestURI("/trenako-web/rs/brand/acme/railway/fs"); NativeWebRequest webRequest = mock(NativeWebRequest.class); when(webRequest.getNativeRequest()).thenReturn(request); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); when(binderFactory.createBinder(eq(webRequest), isA(SearchRequest.class), eq(""))) .thenAnswer(new Answer<ExtendedServletRequestDataBinder>() { @Override//from w w w .j a v a 2s . c om public ExtendedServletRequestDataBinder answer(InvocationOnMock invocation) throws Throwable { Object[] args = invocation.getArguments(); SearchRequest req = (SearchRequest) args[1]; return new ExtendedServletRequestDataBinder(req, ""); } }); Object obj = resolver.resolveArgument(parSearchRequest, null, webRequest, binderFactory); assertNotNull(obj); assertTrue(obj instanceof SearchRequest); SearchRequest expected = new SearchRequest(); expected.setBrand("acme"); expected.setRailway("fs"); assertEquals(expected, (SearchRequest) obj); }
From source file:com.trenako.web.infrastructure.RangeRequestArgumentResolverTests.java
@Test public void shouldResolveRequestForStringBasedRanges() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("max", "47cc67093475061e3d95369d"); request.addParameter("since", "47cc67093475061e3d95369e"); request.addParameter("size", "50"); request.addParameter("sort", "name"); request.addParameter("dir", "desc"); NativeWebRequest webRequest = mock(NativeWebRequest.class); when(webRequest.getNativeRequest()).thenReturn(request); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); when(binderFactory.createBinder(eq(webRequest), isA(RangeRequest.class), eq(""))) .thenAnswer(new Answer<ExtendedServletRequestDataBinder>() { @Override//w w w .java2 s . com public ExtendedServletRequestDataBinder answer(InvocationOnMock invocation) throws Throwable { Object[] args = invocation.getArguments(); RangeRequest req = (RangeRequest) args[1]; return new ExtendedServletRequestDataBinder(req, ""); } }); Object obj = resolver.resolveArgument(parRangeRequest, null, webRequest, binderFactory); assertNotNull(obj); assertTrue(obj instanceof RangeRequest); assertEquals("max=47cc67093475061e3d95369d,since=47cc67093475061e3d95369e,size=50,sort=name: DESC", obj.toString()); }
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 av a 2 s . c o m @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:com.trenako.web.infrastructure.RangeRequestArgumentResolverTests.java
@Test public void shouldResolveRequestForDateBasedRangeRequests() throws Exception { MockHttpServletRequest request = new MockHttpServletRequest(); request.addParameter("max", "2012-06-01T11:40:00"); request.addParameter("since", "2012-06-01T11:30:00"); request.addParameter("size", "50"); request.addParameter("sort", "lastModified"); request.addParameter("dir", "desc"); NativeWebRequest webRequest = mock(NativeWebRequest.class); when(webRequest.getNativeRequest()).thenReturn(request); WebDataBinderFactory binderFactory = mock(WebDataBinderFactory.class); when(binderFactory.createBinder(eq(webRequest), isA(RangeRequest.class), eq(""))) .thenAnswer(new Answer<ExtendedServletRequestDataBinder>() { @Override/*from w w w .j a v a2s. c om*/ public ExtendedServletRequestDataBinder answer(InvocationOnMock invocation) throws Throwable { Object[] args = invocation.getArguments(); RangeRequest req = (RangeRequest) args[1]; return new ExtendedServletRequestDataBinder(req, ""); } }); Object obj = resolver.resolveArgument(parRangeRequest, null, webRequest, binderFactory); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); RangeRequest rangeRequest = (RangeRequest) obj; assertNotNull(rangeRequest); assertNotNull("Since date is null", rangeRequest.getSince()); assertNotNull("Max date is null", rangeRequest.getMax()); assertEquals("01/06/2012 11:30:00", sdf.format(rangeRequest.getSince())); assertEquals("01/06/2012 11:40:00", sdf.format(rangeRequest.getMax())); }
From source file:com.trenako.web.infrastructure.SearchRequestArgumentResolver.java
@Override public Object resolveArgument(MethodParameter param, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { if (param.getParameterType().equals(SearchRequest.class)) { SearchRequest searchRequest = new SearchRequest(); WebDataBinder webBinder = binderFactory.createBinder(webRequest, searchRequest, ""); HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); PropertyValues pvs = new ServletRequestPathVariablesPropertyValues(request); webBinder.bind(pvs);//from w w w. j av a 2 s . c om return searchRequest; } return UNRESOLVED; }
From source file:com.trenako.web.infrastructure.RangeRequestArgumentResolver.java
@Override public Object resolveArgument(MethodParameter param, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory webBinder) throws Exception { if (param.getParameterType().equals(RangeRequest.class)) { RangeRequest rangeRequest = new RangeRequest(this.failbackRequest.getSort(), this.failbackRequest.getSize(), null, null); ServletRequest request = (ServletRequest) webRequest.getNativeRequest(); PropertyValues propValues = new ServletRequestParameterPropertyValues(request); WebDataBinder wdb = webBinder.createBinder(webRequest, rangeRequest, ""); wdb.registerCustomEditor(Sort.class, new SortPropertyEditor(propValues)); wdb.bind(propValues);/*from w w w . j ava 2 s. co m*/ if (rangeRequest.getRangeType() == RangeTypes.DATES) { parseSinceDate(rangeRequest); parseMaxDate(rangeRequest); } return rangeRequest; } return UNRESOLVED; }
From source file:com.fengduo.bee.commons.component.FormModelMethodArgumentResolver.java
/** * Create a model attribute from a String request value (e.g. URI template variable, request parameter) using type * conversion./*from w ww . j a v a 2 s . c o m*/ * <p> * The default implementation converts only if there a registered * {@link org.springframework.core.convert.converter.Converter} that can perform the conversion. * * @param sourceValue the source value to create the model attribute from * @param attributeName the name of the attribute, never {@code null} * @param parameter the method parameter * @param binderFactory for creating WebDataBinder instance * @param request the current request * @return the created model attribute, or {@code null} * @throws Exception */ protected Object createAttributeFromRequestValue(String sourceValue, String attributeName, MethodParameter parameter, WebDataBinderFactory binderFactory, NativeWebRequest request) throws Exception { DataBinder binder = binderFactory.createBinder(request, null, attributeName); ConversionService conversionService = binder.getConversionService(); if (conversionService != null) { TypeDescriptor source = TypeDescriptor.valueOf(String.class); TypeDescriptor target = new TypeDescriptor(parameter); if (conversionService.canConvert(source, target)) { return binder.convertIfNecessary(sourceValue, parameter.getParameterType(), parameter); } } return null; }
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. *//* w w w . j a va 2 s. c om*/ 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: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 . jav a 2 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.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 ww w .j a va 2s .c o 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; }