Skip to content

Commit d69e048

Browse files
committed
Allow Thymeleaf's LayoutDialect to be overridden
Closes gh-5151
1 parent b726974 commit d69e048

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfiguration.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ public SpringTemplateEngine templateEngine() {
148148
protected static class ThymeleafWebLayoutConfiguration {
149149

150150
@Bean
151+
@ConditionalOnMissingBean
151152
public LayoutDialect layoutDialect() {
152153
return new LayoutDialect();
153154
}

spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/thymeleaf/ThymeleafAutoConfigurationTests.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.util.Collections;
2121
import java.util.Locale;
2222

23+
import nz.net.ultraq.thymeleaf.LayoutDialect;
24+
import nz.net.ultraq.thymeleaf.decorators.strategies.GroupingStrategy;
2325
import org.junit.After;
2426
import org.junit.Rule;
2527
import org.junit.Test;
@@ -31,18 +33,24 @@
3133
import org.thymeleaf.templateresolver.TemplateResolver;
3234

3335
import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration;
36+
import org.springframework.boot.autoconfigure.test.ImportAutoConfiguration;
3437
import org.springframework.boot.test.EnvironmentTestUtils;
3538
import org.springframework.boot.test.OutputCapture;
3639
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
40+
import org.springframework.context.annotation.Bean;
41+
import org.springframework.context.annotation.Configuration;
3742
import org.springframework.mock.web.MockHttpServletRequest;
3843
import org.springframework.mock.web.MockHttpServletResponse;
3944
import org.springframework.mock.web.MockServletContext;
45+
import org.springframework.test.util.ReflectionTestUtils;
4046
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
4147
import org.springframework.web.servlet.ViewResolver;
4248
import org.springframework.web.servlet.resource.ResourceUrlEncodingFilter;
4349
import org.springframework.web.servlet.support.RequestContext;
4450

4551
import static org.hamcrest.Matchers.containsString;
52+
import static org.hamcrest.Matchers.instanceOf;
53+
import static org.hamcrest.Matchers.is;
4654
import static org.junit.Assert.assertArrayEquals;
4755
import static org.junit.Assert.assertEquals;
4856
import static org.junit.Assert.assertNotNull;
@@ -221,4 +229,24 @@ public void registerResourceHandlingFilterOnlyIfResourceChainIsEnabled()
221229
assertNotNull(this.context.getBean(ResourceUrlEncodingFilter.class));
222230
}
223231

232+
@Test
233+
public void layoutDialectCanBeCustomized() throws Exception {
234+
this.context.register(LayoutDialectConfiguration.class);
235+
this.context.refresh();
236+
LayoutDialect layoutDialect = this.context.getBean(LayoutDialect.class);
237+
assertThat(ReflectionTestUtils.getField(layoutDialect, "sortingStrategy"),
238+
is(instanceOf(GroupingStrategy.class)));
239+
}
240+
241+
@Configuration
242+
@ImportAutoConfiguration({ ThymeleafAutoConfiguration.class,
243+
PropertyPlaceholderAutoConfiguration.class })
244+
static class LayoutDialectConfiguration {
245+
246+
@Bean
247+
public LayoutDialect layoutDialect() {
248+
return new LayoutDialect(new GroupingStrategy());
249+
}
250+
}
251+
224252
}

0 commit comments

Comments
 (0)