Search in sources :

Example 26 with Model

use of org.springframework.ui.Model in project spring-framework by spring-projects.

the class AbstractNamedValueArgumentResolver method resolveArgument.

@Override
public Mono<Object> resolveArgument(MethodParameter parameter, BindingContext bindingContext, ServerWebExchange exchange) {
    NamedValueInfo namedValueInfo = getNamedValueInfo(parameter);
    MethodParameter nestedParameter = parameter.nestedIfOptional();
    Object resolvedName = resolveStringValue(namedValueInfo.name);
    if (resolvedName == null) {
        return Mono.error(new IllegalArgumentException("Specified name must not resolve to null: [" + namedValueInfo.name + "]"));
    }
    Model model = bindingContext.getModel();
    return resolveName(resolvedName.toString(), nestedParameter, exchange).map(arg -> {
        if ("".equals(arg) && namedValueInfo.defaultValue != null) {
            arg = resolveStringValue(namedValueInfo.defaultValue);
        }
        arg = applyConversion(arg, namedValueInfo, parameter, bindingContext, exchange);
        handleResolvedValue(arg, namedValueInfo.name, parameter, model, exchange);
        return arg;
    }).otherwiseIfEmpty(getDefaultValue(namedValueInfo, parameter, bindingContext, model, exchange));
}
Also used : ConversionNotSupportedException(org.springframework.beans.ConversionNotSupportedException) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) ServerWebInputException(org.springframework.web.server.ServerWebInputException) Mono(reactor.core.publisher.Mono) BindingContext(org.springframework.web.reactive.BindingContext) ServerErrorException(org.springframework.web.server.ServerErrorException) BeanExpressionContext(org.springframework.beans.factory.config.BeanExpressionContext) TypeMismatchException(org.springframework.beans.TypeMismatchException) HandlerMethodArgumentResolver(org.springframework.web.reactive.result.method.HandlerMethodArgumentResolver) ServerWebExchange(org.springframework.web.server.ServerWebExchange) HandlerMethodArgumentResolverSupport(org.springframework.web.reactive.result.method.HandlerMethodArgumentResolverSupport) Model(org.springframework.ui.Model) Map(java.util.Map) MethodParameter(org.springframework.core.MethodParameter) WebDataBinder(org.springframework.web.bind.WebDataBinder) ValueConstants(org.springframework.web.bind.annotation.ValueConstants) ConfigurableBeanFactory(org.springframework.beans.factory.config.ConfigurableBeanFactory) ReactiveAdapterRegistry(org.springframework.core.ReactiveAdapterRegistry) BeanExpressionResolver(org.springframework.beans.factory.config.BeanExpressionResolver) Model(org.springframework.ui.Model) MethodParameter(org.springframework.core.MethodParameter)

Example 27 with Model

use of org.springframework.ui.Model in project spring-framework by spring-projects.

the class ViewResolutionResultHandler method handleResult.

@Override
@SuppressWarnings("unchecked")
public Mono<Void> handleResult(ServerWebExchange exchange, HandlerResult result) {
    Mono<Object> valueMono;
    ResolvableType valueType;
    ReactiveAdapter adapter = getAdapter(result);
    if (adapter != null) {
        Assert.isTrue(!adapter.isMultiValue(), "Only single-value async return type supported.");
        valueMono = result.getReturnValue().map(value -> Mono.from(adapter.toPublisher(value))).orElse(Mono.empty());
        valueType = adapter.isNoValue() ? ResolvableType.forClass(Void.class) : result.getReturnType().getGeneric(0);
    } else {
        valueMono = Mono.justOrEmpty(result.getReturnValue());
        valueType = result.getReturnType();
    }
    return valueMono.otherwiseIfEmpty(exchange.isNotModified() ? Mono.empty() : NO_VALUE_MONO).then(returnValue -> {
        Mono<List<View>> viewsMono;
        Model model = result.getModel();
        MethodParameter parameter = result.getReturnTypeSource();
        Locale acceptLocale = exchange.getRequest().getHeaders().getAcceptLanguageAsLocale();
        Locale locale = acceptLocale != null ? acceptLocale : Locale.getDefault();
        Class<?> clazz = valueType.getRawClass();
        if (clazz == null) {
            clazz = returnValue.getClass();
        }
        if (returnValue == NO_VALUE || Void.class.equals(clazz) || void.class.equals(clazz)) {
            viewsMono = resolveViews(getDefaultViewName(exchange), locale);
        } else if (Model.class.isAssignableFrom(clazz)) {
            model.addAllAttributes(((Model) returnValue).asMap());
            viewsMono = resolveViews(getDefaultViewName(exchange), locale);
        } else if (Map.class.isAssignableFrom(clazz)) {
            model.addAllAttributes((Map<String, ?>) returnValue);
            viewsMono = resolveViews(getDefaultViewName(exchange), locale);
        } else if (View.class.isAssignableFrom(clazz)) {
            viewsMono = Mono.just(Collections.singletonList((View) returnValue));
        } else if (CharSequence.class.isAssignableFrom(clazz) && !hasModelAnnotation(parameter)) {
            viewsMono = resolveViews(returnValue.toString(), locale);
        } else {
            String name = getNameForReturnValue(clazz, parameter);
            model.addAttribute(name, returnValue);
            viewsMono = resolveViews(getDefaultViewName(exchange), locale);
        }
        return resolveAsyncAttributes(model.asMap()).doOnSuccess(aVoid -> addBindingResult(result.getBindingContext(), exchange)).then(viewsMono).then(views -> render(views, model.asMap(), exchange));
    });
}
Also used : Locale(java.util.Locale) Model(org.springframework.ui.Model) ArrayList(java.util.ArrayList) List(java.util.List) ResolvableType(org.springframework.core.ResolvableType) MethodParameter(org.springframework.core.MethodParameter) ReactiveAdapter(org.springframework.core.ReactiveAdapter)

Example 28 with Model

use of org.springframework.ui.Model in project spring-framework by spring-projects.

the class ModelMethodProcessorTests method handleModelReturnValue.

@Test
public void handleModelReturnValue() throws Exception {
    mavContainer.addAttribute("attr1", "value1");
    Model returnValue = new ExtendedModelMap();
    returnValue.addAttribute("attr2", "value2");
    processor.handleReturnValue(returnValue, returnParamModel, mavContainer, webRequest);
    assertEquals("value1", mavContainer.getModel().get("attr1"));
    assertEquals("value2", mavContainer.getModel().get("attr2"));
}
Also used : ExtendedModelMap(org.springframework.ui.ExtendedModelMap) Model(org.springframework.ui.Model) Test(org.junit.Test)

Example 29 with Model

use of org.springframework.ui.Model in project spring-framework by spring-projects.

the class ViewResolutionResultHandlerTests method testHandle.

private ServerWebExchange testHandle(String path, MethodParameter returnType, Object returnValue, String responseBody, ViewResolver... resolvers) throws URISyntaxException {
    Model model = this.bindingContext.getModel();
    model.asMap().clear();
    model.addAttribute("id", "123");
    HandlerResult result = new HandlerResult(new Object(), returnValue, returnType, this.bindingContext);
    MockServerWebExchange exchange = get(path).toExchange();
    resultHandler(resolvers).handleResult(exchange, result).block(Duration.ofSeconds(5));
    assertResponseBody(exchange, responseBody);
    return exchange;
}
Also used : ConcurrentModel(org.springframework.ui.ConcurrentModel) Model(org.springframework.ui.Model) HandlerResult(org.springframework.web.reactive.HandlerResult) MockServerWebExchange(org.springframework.mock.http.server.reactive.test.MockServerWebExchange)

Example 30 with Model

use of org.springframework.ui.Model in project spring-framework by spring-projects.

the class RequestMappingHandlerAdapterIntegrationTests method handle.

@Test
public void handle() throws Exception {
    Class<?>[] parameterTypes = new Class<?>[] { int.class, String.class, String.class, String.class, Map.class, Date.class, Map.class, String.class, String.class, TestBean.class, Errors.class, TestBean.class, Color.class, HttpServletRequest.class, HttpServletResponse.class, TestBean.class, TestBean.class, User.class, OtherUser.class, Model.class, UriComponentsBuilder.class };
    String datePattern = "yyyy.MM.dd";
    String formattedDate = "2011.03.16";
    Date date = new GregorianCalendar(2011, Calendar.MARCH, 16).getTime();
    TestBean sessionAttribute = new TestBean();
    TestBean requestAttribute = new TestBean();
    request.addHeader("Content-Type", "text/plain; charset=utf-8");
    request.addHeader("header", "headerValue");
    request.addHeader("anotherHeader", "anotherHeaderValue");
    request.addParameter("datePattern", datePattern);
    request.addParameter("dateParam", formattedDate);
    request.addParameter("paramByConvention", "paramByConventionValue");
    request.addParameter("age", "25");
    request.setCookies(new Cookie("cookie", "99"));
    request.setContent("Hello World".getBytes("UTF-8"));
    request.setUserPrincipal(new User());
    request.setContextPath("/contextPath");
    request.setServletPath("/main");
    System.setProperty("systemHeader", "systemHeaderValue");
    Map<String, String> uriTemplateVars = new HashMap<>();
    uriTemplateVars.put("pathvar", "pathvarValue");
    request.setAttribute(HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE, uriTemplateVars);
    request.getSession().setAttribute("sessionAttribute", sessionAttribute);
    request.setAttribute("requestAttribute", requestAttribute);
    HandlerMethod handlerMethod = handlerMethod("handle", parameterTypes);
    ModelAndView mav = handlerAdapter.handle(request, response, handlerMethod);
    ModelMap model = mav.getModelMap();
    assertEquals("viewName", mav.getViewName());
    assertEquals(99, model.get("cookie"));
    assertEquals("pathvarValue", model.get("pathvar"));
    assertEquals("headerValue", model.get("header"));
    assertEquals(date, model.get("dateParam"));
    Map<?, ?> map = (Map<?, ?>) model.get("headerMap");
    assertEquals("headerValue", map.get("header"));
    assertEquals("anotherHeaderValue", map.get("anotherHeader"));
    assertEquals("systemHeaderValue", model.get("systemHeader"));
    map = (Map<?, ?>) model.get("paramMap");
    assertEquals(formattedDate, map.get("dateParam"));
    assertEquals("paramByConventionValue", map.get("paramByConvention"));
    assertEquals("/contextPath", model.get("value"));
    TestBean modelAttr = (TestBean) model.get("modelAttr");
    assertEquals(25, modelAttr.getAge());
    assertEquals("Set by model method [modelAttr]", modelAttr.getName());
    assertSame(modelAttr, request.getSession().getAttribute("modelAttr"));
    BindingResult bindingResult = (BindingResult) model.get(BindingResult.MODEL_KEY_PREFIX + "modelAttr");
    assertSame(modelAttr, bindingResult.getTarget());
    assertEquals(1, bindingResult.getErrorCount());
    String conventionAttrName = "testBean";
    TestBean modelAttrByConvention = (TestBean) model.get(conventionAttrName);
    assertEquals(25, modelAttrByConvention.getAge());
    assertEquals("Set by model method [modelAttrByConvention]", modelAttrByConvention.getName());
    assertSame(modelAttrByConvention, request.getSession().getAttribute(conventionAttrName));
    bindingResult = (BindingResult) model.get(BindingResult.MODEL_KEY_PREFIX + conventionAttrName);
    assertSame(modelAttrByConvention, bindingResult.getTarget());
    assertTrue(model.get("customArg") instanceof Color);
    assertEquals(User.class, model.get("user").getClass());
    assertEquals(OtherUser.class, model.get("otherUser").getClass());
    assertSame(sessionAttribute, model.get("sessionAttribute"));
    assertSame(requestAttribute, model.get("requestAttribute"));
    assertEquals(new URI("http://localhost/contextPath/main/path"), model.get("url"));
}
Also used : Cookie(javax.servlet.http.Cookie) BindingResult(org.springframework.validation.BindingResult) HashMap(java.util.HashMap) Color(java.awt.Color) ModelMap(org.springframework.ui.ModelMap) GregorianCalendar(java.util.GregorianCalendar) ModelAndView(org.springframework.web.servlet.ModelAndView) MockHttpServletResponse(org.springframework.mock.web.test.MockHttpServletResponse) HttpServletResponse(javax.servlet.http.HttpServletResponse) URI(java.net.URI) Date(java.util.Date) InvocableHandlerMethod(org.springframework.web.method.support.InvocableHandlerMethod) HandlerMethod(org.springframework.web.method.HandlerMethod) MockMultipartHttpServletRequest(org.springframework.mock.web.test.MockMultipartHttpServletRequest) HttpServletRequest(javax.servlet.http.HttpServletRequest) MockHttpServletRequest(org.springframework.mock.web.test.MockHttpServletRequest) Errors(org.springframework.validation.Errors) TestBean(org.springframework.tests.sample.beans.TestBean) UriComponentsBuilder(org.springframework.web.util.UriComponentsBuilder) Model(org.springframework.ui.Model) ModelMap(org.springframework.ui.ModelMap) Map(java.util.Map) HashMap(java.util.HashMap) Test(org.junit.Test)

Aggregations

Model (org.springframework.ui.Model)38 ExtendedModelMap (org.springframework.ui.ExtendedModelMap)24 HttpServletResponse (javax.servlet.http.HttpServletResponse)15 BindingResult (org.springframework.validation.BindingResult)15 HttpServletRequest (javax.servlet.http.HttpServletRequest)10 CreateUserCommand (org.asqatasun.webapp.command.CreateUserCommand)10 MockHttpServletRequest (org.springframework.mock.web.MockHttpServletRequest)9 MediaType (org.springframework.http.MediaType)8 IOException (java.io.IOException)6 Map (java.util.Map)6 Logger (org.slf4j.Logger)6 LoggerFactory (org.slf4j.LoggerFactory)6 Autowired (org.springframework.beans.factory.annotation.Autowired)6 WebDataBinder (org.springframework.web.bind.WebDataBinder)6 GetRequest (com.mashape.unirest.request.GetRequest)5 FileNotFoundException (java.io.FileNotFoundException)5 DateFormat (java.text.DateFormat)5 SimpleDateFormat (java.text.SimpleDateFormat)5 java.util (java.util)5 Valid (javax.validation.Valid)5