Browse Source

Configure view controllers with ApplicationContext

Issue: SPR-13762
pull/932/head
Rossen Stoyanchev 9 years ago
parent
commit
153a23dbf9
  1. 7
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/RedirectViewControllerRegistration.java
  2. 6
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistration.java
  3. 12
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistry.java
  4. 1
      spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java
  5. 23
      spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistryTests.java

7
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/RedirectViewControllerRegistration.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.web.servlet.config.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.util.Assert;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
@ -81,6 +82,10 @@ public class RedirectViewControllerRegistration { @@ -81,6 +82,10 @@ public class RedirectViewControllerRegistration {
return this;
}
protected void setApplicationContext(ApplicationContext applicationContext) {
this.controller.setApplicationContext(applicationContext);
this.redirectView.setApplicationContext(applicationContext);
}
protected String getUrlPath() {
return this.urlPath;

6
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistration.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -16,6 +16,7 @@ @@ -16,6 +16,7 @@
package org.springframework.web.servlet.config.annotation;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.util.Assert;
import org.springframework.web.servlet.RequestToViewNameTranslator;
@ -65,6 +66,9 @@ public class ViewControllerRegistration { @@ -65,6 +66,9 @@ public class ViewControllerRegistration {
this.controller.setViewName(viewName);
}
protected void setApplicationContext(ApplicationContext applicationContext) {
this.controller.setApplicationContext(applicationContext);
}
protected String getUrlPath() {
return this.urlPath;

12
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistry.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -21,6 +21,7 @@ import java.util.LinkedHashMap; @@ -21,6 +21,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.web.servlet.handler.AbstractHandlerMapping;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
@ -42,6 +43,8 @@ public class ViewControllerRegistry { @@ -42,6 +43,8 @@ public class ViewControllerRegistry {
private int order = 1;
private ApplicationContext applicationContext;
/**
* Map a view controller to the given URL path (or pattern) in order to render
@ -49,6 +52,7 @@ public class ViewControllerRegistry { @@ -49,6 +52,7 @@ public class ViewControllerRegistry {
*/
public ViewControllerRegistration addViewController(String urlPath) {
ViewControllerRegistration registration = new ViewControllerRegistration(urlPath);
registration.setApplicationContext(this.applicationContext);
this.registrations.add(registration);
return registration;
}
@ -61,6 +65,7 @@ public class ViewControllerRegistry { @@ -61,6 +65,7 @@ public class ViewControllerRegistry {
*/
public RedirectViewControllerRegistration addRedirectViewController(String urlPath, String redirectUrl) {
RedirectViewControllerRegistration registration = new RedirectViewControllerRegistration(urlPath, redirectUrl);
registration.setApplicationContext(this.applicationContext);
this.redirectRegistrations.add(registration);
return registration;
}
@ -72,6 +77,7 @@ public class ViewControllerRegistry { @@ -72,6 +77,7 @@ public class ViewControllerRegistry {
*/
public void addStatusController(String urlPath, HttpStatus statusCode) {
ViewControllerRegistration registration = new ViewControllerRegistration(urlPath);
registration.setApplicationContext(this.applicationContext);
registration.setStatusCode(statusCode);
registration.getViewController().setStatusOnly(true);
this.registrations.add(registration);
@ -87,6 +93,10 @@ public class ViewControllerRegistry { @@ -87,6 +93,10 @@ public class ViewControllerRegistry {
this.order = order;
}
protected void setApplicationContext(ApplicationContext applicationContext) {
this.applicationContext = applicationContext;
}
/**
* Return the {@code HandlerMapping} that contains the registered view

1
spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java

@ -364,6 +364,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv @@ -364,6 +364,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv
@Bean
public HandlerMapping viewControllerHandlerMapping() {
ViewControllerRegistry registry = new ViewControllerRegistry();
registry.setApplicationContext(this.applicationContext);
addViewControllers(registry);
AbstractHandlerMapping handlerMapping = registry.getHandlerMapping();

23
spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/ViewControllerRegistryTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2014 the original author or authors.
* Copyright 2002-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -22,6 +22,7 @@ import java.util.Map; @@ -22,6 +22,7 @@ import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.StaticApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.mock.web.test.MockHttpServletRequest;
import org.springframework.mock.web.test.MockHttpServletResponse;
@ -48,6 +49,7 @@ public class ViewControllerRegistryTests { @@ -48,6 +49,7 @@ public class ViewControllerRegistryTests {
@Before
public void setUp() {
this.registry = new ViewControllerRegistry();
this.registry.setApplicationContext(new StaticApplicationContext());
this.request = new MockHttpServletRequest("GET", "/");
this.response = new MockHttpServletResponse();
}
@ -61,18 +63,22 @@ public class ViewControllerRegistryTests { @@ -61,18 +63,22 @@ public class ViewControllerRegistryTests {
public void addViewController() {
this.registry.addViewController("/path").setViewName("viewName");
ParameterizableViewController controller = getController("/path");
assertEquals("viewName", controller.getViewName());
assertNull(controller.getStatusCode());
assertFalse(controller.isStatusOnly());
assertNotNull(controller.getApplicationContext());
}
@Test
public void addViewControllerWithDefaultViewName() {
this.registry.addViewController("/path");
ParameterizableViewController controller = getController("/path");
assertNull(controller.getViewName());
assertNull(controller.getStatusCode());
assertFalse(controller.isStatusOnly());
assertNotNull(controller.getApplicationContext());
}
@Test
@ -85,6 +91,7 @@ public class ViewControllerRegistryTests { @@ -85,6 +91,7 @@ public class ViewControllerRegistryTests {
assertEquals(302, this.response.getStatus());
assertEquals("/context/redirectTo", this.response.getRedirectedUrl());
assertNotNull(redirectView.getApplicationContext());
}
@Test
@ -101,18 +108,20 @@ public class ViewControllerRegistryTests { @@ -101,18 +108,20 @@ public class ViewControllerRegistryTests {
assertEquals(308, this.response.getStatus());
assertEquals("/redirectTo?a=b", response.getRedirectedUrl());
assertNotNull(redirectView.getApplicationContext());
}
@Test
public void addStatusController() {
this.registry.addStatusController("/path", HttpStatus.NOT_FOUND);
ParameterizableViewController controller = getController("/path");
assertNull(controller.getViewName());
assertEquals(HttpStatus.NOT_FOUND, controller.getStatusCode());
assertTrue(controller.isStatusOnly());
assertNotNull(controller.getApplicationContext());
}
@Test
public void order() {
this.registry.addViewController("/path");
@ -124,6 +133,7 @@ public class ViewControllerRegistryTests { @@ -124,6 +133,7 @@ public class ViewControllerRegistryTests {
assertEquals(2, handlerMapping.getOrder());
}
private ParameterizableViewController getController(String path) {
Map<String, ?> urlMap = getHandlerMapping().getUrlMap();
ParameterizableViewController controller = (ParameterizableViewController) urlMap.get(path);
@ -131,17 +141,16 @@ public class ViewControllerRegistryTests { @@ -131,17 +141,16 @@ public class ViewControllerRegistryTests {
return controller;
}
private SimpleUrlHandlerMapping getHandlerMapping() {
return (SimpleUrlHandlerMapping) this.registry.getHandlerMapping();
}
private RedirectView getRedirectView(String path) {
ParameterizableViewController controller = getController("/path");
ParameterizableViewController controller = getController(path);
assertNull(controller.getViewName());
assertNotNull(controller.getView());
assertEquals(RedirectView.class, controller.getView().getClass());
return (RedirectView) controller.getView();
}
private SimpleUrlHandlerMapping getHandlerMapping() {
return (SimpleUrlHandlerMapping) this.registry.getHandlerMapping();
}
}

Loading…
Cancel
Save