Skip to content

Commit 56c1247

Browse files
danielfernandezbclozel
authored andcommitted
Add new config keys for Thymeleaf 3.0.10 features
This commit adds the following configuration properties: * `spring.thymeleaf.render-hidden-markers-before-checkboxes` * `spring.thymeleaf.servlet.produce-partial-output-while-processing`
1 parent 98d9526 commit 56c1247

File tree

4 files changed

+85
-0
lines changed

4 files changed

+85
-0
lines changed

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ public ThymeleafDefaultConfiguration(ThymeleafProperties properties,
154154
public SpringTemplateEngine templateEngine() {
155155
SpringTemplateEngine engine = new SpringTemplateEngine();
156156
engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler());
157+
engine.setRenderHiddenMarkersBeforeCheckboxes(
158+
this.properties.isRenderHiddenMarkersBeforeCheckboxes());
157159
this.templateResolvers.forEach(engine::addTemplateResolver);
158160
this.dialects.orderedStream().forEach(engine::addDialect);
159161
return engine;
@@ -198,6 +200,8 @@ public ThymeleafViewResolver thymeleafViewResolver() {
198200
resolver.setContentType(
199201
appendCharset(this.properties.getServlet().getContentType(),
200202
resolver.getCharacterEncoding()));
203+
resolver.setProducePartialOutputWhileProcessing(this.properties
204+
.getServlet().isProducePartialOutputWhileProcessing());
201205
resolver.setExcludedViewNames(this.properties.getExcludedViewNames());
202206
resolver.setViewNames(this.properties.getViewNames());
203207
// This resolver acts as a fallback resolver (e.g. like a
@@ -245,6 +249,8 @@ static class ThymeleafReactiveConfiguration {
245249
public SpringWebFluxTemplateEngine templateEngine() {
246250
SpringWebFluxTemplateEngine engine = new SpringWebFluxTemplateEngine();
247251
engine.setEnableSpringELCompiler(this.properties.isEnableSpringElCompiler());
252+
engine.setRenderHiddenMarkersBeforeCheckboxes(
253+
this.properties.isRenderHiddenMarkersBeforeCheckboxes());
248254
this.templateResolvers.forEach(engine::addTemplateResolver);
249255
this.dialects.orderedStream().forEach(engine::addDialect);
250256
return engine;

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@ public class ThymeleafProperties {
101101
*/
102102
private boolean enableSpringElCompiler;
103103

104+
/**
105+
* Whether hidden form inputs acting as markers for checkboxes (which are omitted from
106+
* form submission when unchecked) should be rendered before or after the rendered
107+
* checkbox element itself for better integration with some CSS frameworks. Default is
108+
* "false" (hiddens will be rendered after checkboxes).
109+
*/
110+
private boolean renderHiddenMarkersBeforeCheckboxes;
111+
104112
/**
105113
* Whether to enable Thymeleaf view resolution for Web frameworks.
106114
*/
@@ -206,6 +214,15 @@ public void setEnableSpringElCompiler(boolean enableSpringElCompiler) {
206214
this.enableSpringElCompiler = enableSpringElCompiler;
207215
}
208216

217+
public boolean isRenderHiddenMarkersBeforeCheckboxes() {
218+
return renderHiddenMarkersBeforeCheckboxes;
219+
}
220+
221+
public void setRenderHiddenMarkersBeforeCheckboxes(
222+
boolean renderHiddenMarkersBeforeCheckboxes) {
223+
this.renderHiddenMarkersBeforeCheckboxes = renderHiddenMarkersBeforeCheckboxes;
224+
}
225+
209226
public Reactive getReactive() {
210227
return this.reactive;
211228
}
@@ -221,6 +238,14 @@ public static class Servlet {
221238
*/
222239
private MimeType contentType = MimeType.valueOf("text/html");
223240

241+
/**
242+
* Whether Thymeleaf should start sending partial output to the server's output
243+
* buffers as soon as it becomes available (default), or instead wait until
244+
* template processing is finished, keeping all rendered results in memory until
245+
* that moment and sending them to the server's output buffers in a single call.
246+
*/
247+
private boolean producePartialOutputWhileProcessing = true;
248+
224249
public MimeType getContentType() {
225250
return this.contentType;
226251
}
@@ -229,6 +254,15 @@ public void setContentType(MimeType contentType) {
229254
this.contentType = contentType;
230255
}
231256

257+
public boolean isProducePartialOutputWhileProcessing() {
258+
return producePartialOutputWhileProcessing;
259+
}
260+
261+
public void setProducePartialOutputWhileProcessing(
262+
boolean producePartialOutputWhileProcessing) {
263+
this.producePartialOutputWhileProcessing = producePartialOutputWhileProcessing;
264+
}
265+
232266
}
233267

234268
public static class Reactive {

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,21 @@ public void enableSpringElCompilerIsDisabledByDefault() {
162162
.getEnableSpringELCompiler()).isFalse();
163163
}
164164

165+
@Test
166+
public void overrideRenderHiddenMarkersBeforeCheckboxes() {
167+
load(BaseConfiguration.class,
168+
"spring.thymeleaf.render-hidden-markers-before-checkboxes:true");
169+
assertThat(this.context.getBean(SpringWebFluxTemplateEngine.class)
170+
.getRenderHiddenMarkersBeforeCheckboxes()).isTrue();
171+
}
172+
173+
@Test
174+
public void enableRenderHiddenMarkersBeforeCheckboxesIsDisabledByDefault() {
175+
load(BaseConfiguration.class);
176+
assertThat(this.context.getBean(SpringWebFluxTemplateEngine.class)
177+
.getRenderHiddenMarkersBeforeCheckboxes()).isFalse();
178+
}
179+
165180
@Test
166181
public void templateLocationDoesNotExist() {
167182
load(BaseConfiguration.class,

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,21 @@ public void overrideCharacterEncoding() {
107107
assertThat(views.getContentType()).isEqualTo("text/html;charset=UTF-16");
108108
}
109109

110+
@Test
111+
public void overrideDisableProducePartialOutputWhileProcessing() {
112+
load(BaseConfiguration.class,
113+
"spring.thymeleaf.servlet.produce-partial-output-while-processing:false");
114+
assertThat(this.context.getBean(ThymeleafViewResolver.class)
115+
.getProducePartialOutputWhileProcessing()).isFalse();
116+
}
117+
118+
@Test
119+
public void disableProducePartialOutputWhileProcessingIsEnabledByDefault() {
120+
load(BaseConfiguration.class);
121+
assertThat(this.context.getBean(ThymeleafViewResolver.class)
122+
.getProducePartialOutputWhileProcessing()).isTrue();
123+
}
124+
110125
@Test
111126
public void overrideTemplateResolverOrder() {
112127
load(BaseConfiguration.class, "spring.thymeleaf.templateResolverOrder:25");
@@ -135,6 +150,21 @@ public void enableSpringElCompilerIsDisabledByDefault() {
135150
.getEnableSpringELCompiler()).isFalse();
136151
}
137152

153+
@Test
154+
public void overrideRenderHiddenMarkersBeforeCheckboxes() {
155+
load(BaseConfiguration.class,
156+
"spring.thymeleaf.render-hidden-markers-before-checkboxes:true");
157+
assertThat(this.context.getBean(SpringTemplateEngine.class)
158+
.getRenderHiddenMarkersBeforeCheckboxes()).isTrue();
159+
}
160+
161+
@Test
162+
public void enableRenderHiddenMarkersBeforeCheckboxesIsDisabledByDefault() {
163+
load(BaseConfiguration.class);
164+
assertThat(this.context.getBean(SpringTemplateEngine.class)
165+
.getRenderHiddenMarkersBeforeCheckboxes()).isFalse();
166+
}
167+
138168
@Test
139169
public void templateLocationDoesNotExist() {
140170
load(BaseConfiguration.class,

0 commit comments

Comments
 (0)