Configure view controllers with ApplicationContext
Issue: SPR-13762
This commit is contained in:
@@ -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 @@
|
||||
|
||||
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 {
|
||||
return this;
|
||||
}
|
||||
|
||||
protected void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.controller.setApplicationContext(applicationContext);
|
||||
this.redirectView.setApplicationContext(applicationContext);
|
||||
}
|
||||
|
||||
protected String getUrlPath() {
|
||||
return this.urlPath;
|
||||
|
||||
@@ -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 @@
|
||||
|
||||
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 {
|
||||
this.controller.setViewName(viewName);
|
||||
}
|
||||
|
||||
protected void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.controller.setApplicationContext(applicationContext);
|
||||
}
|
||||
|
||||
protected String getUrlPath() {
|
||||
return this.urlPath;
|
||||
|
||||
@@ -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;
|
||||
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 {
|
||||
|
||||
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 {
|
||||
*/
|
||||
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 {
|
||||
*/
|
||||
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 {
|
||||
*/
|
||||
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 {
|
||||
this.order = order;
|
||||
}
|
||||
|
||||
protected void setApplicationContext(ApplicationContext applicationContext) {
|
||||
this.applicationContext = applicationContext;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Return the {@code HandlerMapping} that contains the registered view
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
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 {
|
||||
@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 {
|
||||
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 {
|
||||
|
||||
assertEquals(302, this.response.getStatus());
|
||||
assertEquals("/context/redirectTo", this.response.getRedirectedUrl());
|
||||
assertNotNull(redirectView.getApplicationContext());
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -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 {
|
||||
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 {
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user