diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/tiles2/TilesConfigurer.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/tiles2/TilesConfigurer.java index ddd24004c15..f05cc45eb08 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/tiles2/TilesConfigurer.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/view/tiles2/TilesConfigurer.java @@ -40,6 +40,8 @@ import org.apache.tiles.definition.DefinitionsFactory; import org.apache.tiles.definition.DefinitionsFactoryException; import org.apache.tiles.definition.DefinitionsReader; import org.apache.tiles.definition.Refreshable; +import org.apache.tiles.definition.dao.BaseLocaleUrlDefinitionDAO; +import org.apache.tiles.definition.dao.CachingLocaleUrlDefinitionDAO; import org.apache.tiles.definition.digester.DigesterDefinitionsReader; import org.apache.tiles.evaluator.AttributeEvaluator; import org.apache.tiles.evaluator.el.ELAttributeEvaluator; @@ -127,6 +129,8 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D private String[] definitions; + private boolean checkRefresh = false; + private boolean validateDefinitions = true; private Class definitionsFactoryClass; @@ -222,6 +226,16 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D } } + /** + * Set whether to check Tiles definition files for a refresh at runtime. + * Default is "false". + */ + public void setCheckRefresh(boolean checkRefresh) { + this.checkRefresh = checkRefresh; + this.tilesPropertyMap.put(CachingLocaleUrlDefinitionDAO.CHECK_REFRESH_INIT_PARAMETER, + Boolean.toString(checkRefresh)); + } + /** * Set whether to validate the Tiles XML definitions. Default is "true". */ @@ -417,6 +431,17 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D } } + @Override + protected BaseLocaleUrlDefinitionDAO instantiateLocaleDefinitionDao(TilesApplicationContext applicationContext, + TilesRequestContextFactory contextFactory, LocaleResolver resolver) { + BaseLocaleUrlDefinitionDAO dao = super.instantiateLocaleDefinitionDao( + applicationContext, contextFactory, resolver); + if (checkRefresh && dao instanceof CachingLocaleUrlDefinitionDAO) { + ((CachingLocaleUrlDefinitionDAO) dao).setCheckRefresh(checkRefresh); + } + return dao; + } + @Override protected DefinitionsReader createDefinitionsReader(TilesApplicationContext applicationContext, TilesRequestContextFactory contextFactory) { @@ -429,12 +454,6 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D return reader; } - @Override - protected LocaleResolver createLocaleResolver(TilesApplicationContext applicationContext, - TilesRequestContextFactory contextFactory) { - return new SpringLocaleResolver(); - } - @Override protected DefinitionsFactory createDefinitionsFactory(TilesApplicationContext applicationContext, TilesRequestContextFactory contextFactory, LocaleResolver resolver) { @@ -471,6 +490,12 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D return super.createPreparerFactory(applicationContext, contextFactory); } } + + @Override + protected LocaleResolver createLocaleResolver(TilesApplicationContext applicationContext, + TilesRequestContextFactory contextFactory) { + return new SpringLocaleResolver(); + } } diff --git a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/tiles2/TilesConfigurerTests.java b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/tiles2/TilesConfigurerTests.java index 05ad89e7dbd..341b98eb592 100644 --- a/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/tiles2/TilesConfigurerTests.java +++ b/org.springframework.web.servlet/src/test/java/org/springframework/web/servlet/view/tiles2/TilesConfigurerTests.java @@ -37,6 +37,7 @@ public class TilesConfigurerTests { MockServletContext sc = new MockServletContext(); TilesConfigurer tc = new TilesConfigurer(); tc.setDefinitions(new String[] {"/org/springframework/web/servlet/view/tiles2/tiles-definitions.xml"}); + tc.setCheckRefresh(true); tc.setServletContext(sc); tc.afterPropertiesSet();