Skip to content

Commit 6aa9e0c

Browse files
committed
mvc:tiles-configurer supports preparer-factory and definitions-factory
Issue: SPR-13363
1 parent 8cd2837 commit 6aa9e0c

File tree

4 files changed

+51
-28
lines changed

4 files changed

+51
-28
lines changed

spring-webmvc/src/main/java/org/springframework/web/servlet/config/TilesConfigurerBeanDefinitionParser.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2002-2014 the original author or authors.
2+
* Copyright 2002-2015 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -29,9 +29,10 @@
2929

3030
/**
3131
* Parse the <mvc:tiles-configurer> MVC namespace element and register
32-
* TilesConfigurer bean
32+
* a corresponding TilesConfigurer bean.
3333
3434
* @author Rossen Stoyanchev
35+
* @author Juergen Hoeller
3536
* @since 4.1
3637
*/
3738
public class TilesConfigurerBeanDefinitionParser extends AbstractSingleBeanDefinitionParser {
@@ -49,11 +50,6 @@ protected String resolveId(Element element, AbstractBeanDefinition definition, P
4950
return BEAN_NAME;
5051
}
5152

52-
@Override
53-
protected boolean shouldGenerateId() {
54-
return super.shouldGenerateId();
55-
}
56-
5753
@Override
5854
protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
5955
List<Element> childElements = DomUtils.getChildElementsByTagName(element, "definitions");
@@ -70,6 +66,12 @@ protected void doParse(Element element, ParserContext parserContext, BeanDefinit
7066
if (element.hasAttribute("validate-definitions")) {
7167
builder.addPropertyValue("validateDefinitions", element.getAttribute("validate-definitions"));
7268
}
69+
if (element.hasAttribute("definitions-factory")) {
70+
builder.addPropertyValue("definitionsFactoryClass", element.getAttribute("definitions-factory"));
71+
}
72+
if (element.hasAttribute("preparer-factory")) {
73+
builder.addPropertyValue("preparerFactoryClass", element.getAttribute("preparer-factory"));
74+
}
7375
}
7476

7577
}

spring-webmvc/src/main/resources/org/springframework/web/servlet/config/spring-mvc-4.2.xsd

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1128,6 +1128,22 @@
11281128
]]></xsd:documentation>
11291129
</xsd:annotation>
11301130
</xsd:attribute>
1131+
<xsd:attribute name="definitions-factory" type="xsd:string">
1132+
<xsd:annotation>
1133+
<xsd:documentation><![CDATA[
1134+
The Tiles DefinitionsFactory class to use. Default is Tiles' default.
1135+
]]></xsd:documentation>
1136+
</xsd:annotation>
1137+
</xsd:attribute>
1138+
<xsd:attribute name="preparer-factory" type="xsd:string">
1139+
<xsd:annotation>
1140+
<xsd:documentation><![CDATA[
1141+
The Tiles PreparerFactory class to use. Default is Tiles' default.
1142+
Consider "org.springframework.web.servlet.view.tiles3.SimpleSpringPreparerFactory" or
1143+
"org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory" (see javadoc).
1144+
]]></xsd:documentation>
1145+
</xsd:annotation>
1146+
</xsd:attribute>
11311147
</xsd:complexType>
11321148
</xsd:element>
11331149

spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import com.fasterxml.jackson.databind.MapperFeature;
3939
import com.fasterxml.jackson.databind.ObjectMapper;
4040
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
41+
import org.apache.tiles.definition.UnresolvingLocaleDefinitionsFactory;
4142
import org.hamcrest.Matchers;
4243
import org.joda.time.LocalDate;
4344
import org.junit.Before;
@@ -136,6 +137,7 @@
136137
import org.springframework.web.servlet.view.groovy.GroovyMarkupViewResolver;
137138
import org.springframework.web.servlet.view.script.ScriptTemplateConfigurer;
138139
import org.springframework.web.servlet.view.script.ScriptTemplateViewResolver;
140+
import org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory;
139141
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
140142
import org.springframework.web.servlet.view.tiles3.TilesViewResolver;
141143
import org.springframework.web.servlet.view.velocity.VelocityConfigurer;
@@ -779,6 +781,8 @@ public void testViewResolution() throws Exception {
779781
accessor = new DirectFieldAccessor(tilesConfigurer);
780782
assertArrayEquals(definitions, (String[]) accessor.getPropertyValue("definitions"));
781783
assertTrue((boolean) accessor.getPropertyValue("checkRefresh"));
784+
assertEquals(UnresolvingLocaleDefinitionsFactory.class, accessor.getPropertyValue("definitionsFactoryClass"));
785+
assertEquals(SpringBeanPreparerFactory.class, accessor.getPropertyValue("preparerFactoryClass"));
782786

783787
FreeMarkerConfigurer freeMarkerConfigurer = appContext.getBean(FreeMarkerConfigurer.class);
784788
assertNotNull(freeMarkerConfigurer);

spring-webmvc/src/test/resources/org/springframework/web/servlet/config/mvc-config-view-resolution.xml

Lines changed: 22 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,42 +2,43 @@
22
<beans xmlns="http://www.springframework.org/schema/beans"
33
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
44
xmlns:mvc="http://www.springframework.org/schema/mvc"
5-
xsi:schemaLocation="
6-
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
7-
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5+
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
6+
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
87

98
<mvc:view-resolvers>
10-
<mvc:bean-name />
11-
<mvc:jsp view-class="org.springframework.web.servlet.view.InternalResourceView" />
12-
<mvc:tiles />
13-
<mvc:freemarker prefix="freemarker-" suffix=".freemarker" view-names="my*,*Report" />
14-
<mvc:velocity cache-views="false" />
15-
<mvc:groovy />
16-
<mvc:script-template />
17-
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
18-
<ref bean="customResolver" />
9+
<mvc:bean-name/>
10+
<mvc:jsp view-class="org.springframework.web.servlet.view.InternalResourceView"/>
11+
<mvc:tiles/>
12+
<mvc:freemarker prefix="freemarker-" suffix=".freemarker" view-names="my*,*Report"/>
13+
<mvc:velocity cache-views="false"/>
14+
<mvc:groovy/>
15+
<mvc:script-template/>
16+
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
17+
<ref bean="customResolver"/>
1918
</mvc:view-resolvers>
2019

21-
<bean id="customResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" />
20+
<bean id="customResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/>
2221

23-
<mvc:tiles-configurer check-refresh="true" validate-definitions="true">
24-
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles1.xml" />
25-
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles2.xml" />
22+
<mvc:tiles-configurer check-refresh="true" validate-definitions="true"
23+
definitions-factory="org.apache.tiles.definition.UnresolvingLocaleDefinitionsFactory"
24+
preparer-factory="org.springframework.web.servlet.view.tiles3.SpringBeanPreparerFactory">
25+
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles1.xml"/>
26+
<mvc:definitions location="/org/springframework/web/servlet/resource/tiles/tiles2.xml"/>
2627
</mvc:tiles-configurer>
2728

2829
<mvc:freemarker-configurer>
29-
<mvc:template-loader-path location="/" />
30-
<mvc:template-loader-path location="/test" />
30+
<mvc:template-loader-path location="/"/>
31+
<mvc:template-loader-path location="/test"/>
3132
</mvc:freemarker-configurer>
3233

33-
<mvc:velocity-configurer resource-loader-path="/test" />
34+
<mvc:velocity-configurer resource-loader-path="/test"/>
3435

35-
<mvc:groovy-configurer resource-loader-path="/test" cache-templates="false" auto-indent="true" />
36+
<mvc:groovy-configurer resource-loader-path="/test" cache-templates="false" auto-indent="true"/>
3637

3738
<mvc:script-template-configurer engine-name="nashorn" render-function="render"
3839
content-type="text/plain" charset="ISO-8859-1"
3940
resource-loader-path="classpath:" shared-engine="false">
40-
<mvc:script location="org/springframework/web/servlet/view/script/nashorn/render.js" />
41+
<mvc:script location="org/springframework/web/servlet/view/script/nashorn/render.js"/>
4142
</mvc:script-template-configurer>
4243

4344
</beans>

0 commit comments

Comments
 (0)