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 a9e82a8d8ef..ddd24004c15 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 @@ -32,12 +32,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.tiles.TilesApplicationContext; import org.apache.tiles.TilesException; +import org.apache.tiles.awareness.TilesApplicationContextAware; import org.apache.tiles.context.AbstractTilesApplicationContextFactory; import org.apache.tiles.context.ChainedTilesRequestContextFactory; import org.apache.tiles.context.TilesRequestContextFactory; 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.digester.DigesterDefinitionsReader; import org.apache.tiles.evaluator.AttributeEvaluator; import org.apache.tiles.evaluator.el.ELAttributeEvaluator; @@ -55,6 +57,8 @@ import org.apache.tiles.startup.BasicTilesInitializer; import org.apache.tiles.startup.TilesInitializer; import org.springframework.beans.BeanUtils; +import org.springframework.beans.BeanWrapper; +import org.springframework.beans.PropertyAccessorFactory; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.util.ClassUtils; @@ -435,7 +439,22 @@ public class TilesConfigurer implements ServletContextAware, InitializingBean, D protected DefinitionsFactory createDefinitionsFactory(TilesApplicationContext applicationContext, TilesRequestContextFactory contextFactory, LocaleResolver resolver) { if (definitionsFactoryClass != null) { - return BeanUtils.instantiate(definitionsFactoryClass); + DefinitionsFactory factory = BeanUtils.instantiate(definitionsFactoryClass); + if (factory instanceof TilesApplicationContextAware) { + ((TilesApplicationContextAware) factory).setApplicationContext(applicationContext); + } + BeanWrapper bw = PropertyAccessorFactory.forBeanPropertyAccess(factory); + if (bw.isWritableProperty("localeResolver")) { + bw.setPropertyValue("localeResolver", resolver); + } + if (bw.isWritableProperty("definitionDAO")) { + bw.setPropertyValue("definitionDAO", + createLocaleDefinitionDao(applicationContext, contextFactory, resolver)); + } + if (factory instanceof Refreshable) { + ((Refreshable) factory).refresh(); + } + return factory; } else { return super.createDefinitionsFactory(applicationContext, contextFactory, resolver);