Example usage for org.springframework.web.method.support ModelAndViewContainer getModel

List of usage examples for org.springframework.web.method.support ModelAndViewContainer getModel

Introduction

In this page you can find the example usage for org.springframework.web.method.support ModelAndViewContainer getModel.

Prototype

public ModelMap getModel() 

Source Link

Document

Return the model to use -- either the "default" or the "redirect" model.

Usage

From source file:com.ufukuzun.myth.dialect.handler.AjaxRequestResponseBodyReturnValueHandler.java

@Override
public void handleReturnValue(Object returnValue, MethodParameter returnType,
        ModelAndViewContainer mavContainer, NativeWebRequest webRequest) throws Exception {
    mavContainer.setRequestHandled(true);

    if (returnValue != null && AjaxResponse.class.isInstance(returnValue)) {
        AjaxResponse ajaxResponse = (AjaxResponse) returnValue;
        HttpServletResponse response = (HttpServletResponse) webRequest.getNativeResponse();
        HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest();

        ModelAndView modelAndView = ajaxResponse.getModelAndView();

        Map<String, Object> mavContainerAttributes = new LinkedHashMap<String, Object>();
        mavContainerAttributes.putAll(mavContainer.getModel());
        modelAndView.getModelMap().mergeAttributes(mavContainerAttributes);

        returnValue = myth.response(ajaxResponse.getAjaxRequest(), modelAndView, response, request);

        writeWithMessageConverters(returnValue, returnType, webRequest);
    }/*from   w w  w . j a  v a 2 s .c  om*/
}

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   ww  w .  j  a va2 s .c o m*/
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   w  ww.j a  va  2  s.c om
 * @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:com.ufukuzun.myth.dialect.handler.AjaxRequestResponseBodyReturnValueHandler.java

@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
    AjaxRequestBody ajaxRequestBody = parameter.getParameterAnnotation(AjaxRequestBody.class);
    boolean performValidation = ajaxRequestBody.validate();
    String targetName = ajaxRequestBody.targetName();
    Assert.notNull(targetName);// w  w  w .  j  a  va  2s  .  c o m

    Object argument = readWithMessageConverters(webRequest, parameter, parameter.getGenericParameterType());

    if (argument != null && AjaxRequest.class.isInstance(argument) && !StringUtils.isEmpty(targetName)) {
        AjaxRequest<?> ajaxRequest = (AjaxRequest<?>) argument;

        mavContainer.addAttribute(targetName, ajaxRequest.getModel());

        if (performValidation) {
            ajaxRequest
                    .setModelValid(myth.validate(mavContainer.getModel(), ajaxRequest.getModel(), targetName));
        }
    }

    return argument;
}

From source file:co.paralleluniverse.springframework.web.servlet.mvc.method.annotation.FiberRequestMappingHandlerAdapter.java

private ModelAndView getModelAndView(ModelAndViewContainer mavContainer, ModelFactory modelFactory,
        NativeWebRequest webRequest) throws Exception {
    modelFactory.updateModel(webRequest, mavContainer);
    if (mavContainer.isRequestHandled()) {
        return null;
    }/*  w w w.jav  a2  s .c o m*/
    ModelMap model = mavContainer.getModel();
    ModelAndView mav = new ModelAndView(mavContainer.getViewName(), model);
    if (!mavContainer.isViewReference()) {
        mav.setView((View) mavContainer.getView());
    }
    if (model instanceof RedirectAttributes) {
        Map<String, ?> flashAttributes = ((RedirectAttributes) model).getFlashAttributes();
        HttpServletRequest request = webRequest.getNativeRequest(HttpServletRequest.class);
        RequestContextUtils.getOutputFlashMap(request).putAll(flashAttributes);
    }
    return mav;
}

From source file:org.springframework.web.method.annotation.ModelAttributeMethodProcessor.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 BindException if data binding and validation result in an error
 * and the next method parameter is not of type {@link Errors}
 * @throws Exception if WebDataBinder initialization fails
 *///from   ww  w  .ja va 2 s  . co  m
@Override
@Nullable
public final Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception {

    Assert.state(mavContainer != null, "ModelAttributeMethodProcessor requires ModelAndViewContainer");
    Assert.state(binderFactory != null, "ModelAttributeMethodProcessor requires WebDataBinderFactory");

    String name = ModelFactory.getNameForParameter(parameter);
    ModelAttribute ann = parameter.getParameterAnnotation(ModelAttribute.class);
    if (ann != null) {
        mavContainer.setBinding(name, ann.binding());
    }

    Object attribute = null;
    BindingResult bindingResult = null;

    if (mavContainer.containsAttribute(name)) {
        attribute = mavContainer.getModel().get(name);
    } else {
        // Create attribute instance
        try {
            attribute = createAttribute(name, parameter, binderFactory, webRequest);
        } catch (BindException ex) {
            if (isBindExceptionRequired(parameter)) {
                // No BindingResult parameter -> fail with BindException
                throw ex;
            }
            // Otherwise, expose null/empty value and associated BindingResult
            if (parameter.getParameterType() == Optional.class) {
                attribute = Optional.empty();
            }
            bindingResult = ex.getBindingResult();
        }
    }

    if (bindingResult == null) {
        // Bean property binding and validation;
        // skipped in case of binding failure on construction.
        WebDataBinder binder = binderFactory.createBinder(webRequest, attribute, name);
        if (binder.getTarget() != null) {
            if (!mavContainer.isBindingDisabled(name)) {
                bindRequestParameters(binder, webRequest);
            }
            validateIfApplicable(binder, parameter);
            if (binder.getBindingResult().hasErrors() && isBindExceptionRequired(binder, parameter)) {
                throw new BindException(binder.getBindingResult());
            }
        }
        // Value type adaptation, also covering java.util.Optional
        if (!parameter.getParameterType().isInstance(attribute)) {
            attribute = binder.convertIfNecessary(binder.getTarget(), parameter.getParameterType(), parameter);
        }
        bindingResult = binder.getBindingResult();
    }

    // Add resolved attribute and BindingResult at the end of the model
    Map<String, Object> bindingResultModel = bindingResult.getModel();
    mavContainer.removeAttributes(bindingResultModel);
    mavContainer.addAllAttributes(bindingResultModel);

    return attribute;
}

From source file:org.springframework.web.method.annotation.ModelFactory.java

/**
 * Promote model attributes listed as {@code @SessionAttributes} to the session.
 * Add {@link BindingResult} attributes where necessary.
 * @param request the current request// w  w w. ja  va2 s. c  om
 * @param container contains the model to update
 * @throws Exception if creating BindingResult attributes fails
 */
public void updateModel(NativeWebRequest request, ModelAndViewContainer container) throws Exception {
    ModelMap defaultModel = container.getDefaultModel();
    if (container.getSessionStatus().isComplete()) {
        this.sessionAttributesHandler.cleanupAttributes(request);
    } else {
        this.sessionAttributesHandler.storeAttributes(request, defaultModel);
    }
    if (!container.isRequestHandled() && container.getModel() == defaultModel) {
        updateBindingResult(request, defaultModel);
    }
}

From source file:org.springframework.web.method.annotation.support.ModelAttributeMethodProcessor.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 BindException if data binding and validation result in an error
 * and the next method parameter is not of type {@link Errors}.
 * @throws Exception if WebDataBinder initialization fails.
 *///from w ww  . j a va  2  s .co m
public final Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
        NativeWebRequest request, WebDataBinderFactory binderFactory) throws Exception {
    String name = ModelFactory.getNameForParameter(parameter);
    Object target = (mavContainer.containsAttribute(name)) ? mavContainer.getModel().get(name)
            : createAttribute(name, parameter, binderFactory, request);

    WebDataBinder binder = binderFactory.createBinder(request, target, name);

    if (binder.getTarget() != null) {
        bindRequestParameters(binder, request);

        if (isValidationApplicable(binder.getTarget(), parameter)) {
            binder.validate();
        }

        if (binder.getBindingResult().hasErrors()) {
            if (isBindExceptionRequired(binder, parameter)) {
                throw new BindException(binder.getBindingResult());
            }
        }
    }

    mavContainer.addAllAttributes(binder.getBindingResult().getModel());

    return binder.getTarget();
}