Thymeleaf war ursprünglich eine Vorlagen-Engine für Webseiten (HTML) und auf HTML-Ausgabe spezialisiert. Aus der Thymeleaf 3-Serie kann jedoch auch einfacher Text ausgegeben werden. Dies kann auch als Vorlage für das Posten in E-Mails und Chats verwendet werden.
In diesem Artikel bereiten wir standardmäßig eine Textausgabe mit dem minimalen Spring Boot unter Verwendung von maven vor. Die abhängigen Bibliotheken unterscheiden sich zwischen der SpringBoot 2-Serie und der 1-Serie. Verwenden Sie beim Erstellen eines Projekts die IDE, die SpringToolsSuite oder maven verwenden kann. pom.xml wird am Ende des Artikels vorgestellt.
Nehmen Sie Einstellungen vor, um Thymeleaf im Textmodus über Spring auszuführen. Thymeleaf-Vorlagen werden von Klassen verarbeitet, die von der TemplateEngine-Schnittstelle erben. Dieses Mal werden wir von Spring Boot aus arbeiten, also werden wir SpringTemplateEngine für Spring verwenden.
ThymeleafConfig.java
package com.github.apz.springsample.config;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.core.env.Environment;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.spring5.SpringTemplateEngine; //Die SpringBoot1-Serie ist eine Importorganisation.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;
@Configuration
public class ThymeleafConfig implements ApplicationContextAware, EnvironmentAware {
@Bean
public TemplateEngine textTemplateEngine() {
final SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(textTemplateResolver());
templateEngine.setTemplateEngineMessageSource(textMessageSource());
return templateEngine;
}
private ITemplateResolver textTemplateResolver() {
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setOrder(Integer.valueOf(1));
templateResolver.setPrefix("/mail/");
templateResolver.setSuffix(".txt");
templateResolver.setTemplateMode(TemplateMode.TEXT);
templateResolver.setCharacterEncoding("utf-8");
templateResolver.setCacheable(false);
return templateResolver;
}
@Bean
public ResourceBundleMessageSource textMessageSource() {
final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource();
messageSource.setBasename("mail/Messages");
return messageSource;
}
@Override
public void setEnvironment(Environment environment) {
this.environment = environment;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
private ApplicationContext applicationContext;
private Environment environment;
}
Zum Ausführen von TemplateEngine ist TemplateResolver erforderlich, das die Ladeeinstellungen von Vorlagendateien steuert. Sie können auch die von Spring behandelte MessageSource übergeben, damit Sie die Nachricht über die Nachrichtendefinitionseigenschaft ausgeben können.
Durch das Schreiben dieser Klasse kann Spring mit dem Namen textTemplateEngine referenziert werden, und die Textvorlage wird mit dem diesmal definierten Inhalt von TemplateResolver verwendet. Beachten Sie insbesondere die folgenden Einstellungen in Template Resolver.
//Platzierungsverzeichnis für Vorlagendateien (src/main/resources/templates/Die folgenden Verzeichnisse)
templateResolver.setPrefix("/mail/");
//Vorlagendateierweiterung. Es wird nur der hier eingestellte Wert gelesen
templateResolver.setSuffix(".txt");
//Thymeleaf-Vorlagenmodus. Da es sich um eine Textausgabe handelt, geben Sie TEXT an
templateResolver.setTemplateMode(TemplateMode.TEXT);
//Zeichenkodierung der zu lesenden Vorlagendatei
templateResolver.setCharacterEncoding("utf-8");
Nachdem die Einstellungen abgeschlossen sind, wird die nächste Klasse ausgegeben.
package com.github.apz.springsample.component;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j2;
@Component
@RequiredArgsConstructor // ※
@Log4j2 // ※
public class ThymeleafText {
private final TemplateEngine templateEngine;
public void process() {
final Context ctx = new Context(Locale.getDefault());
ctx.setVariable("subscriptionDate", new Date());
String text = this.templateEngine.process("/mail/sample.txt", ctx);
log.info(text);
}
}
Führen Sie die folgenden Schritte aus, um von der Thymeleaf-Vorlagen-Engine auszugeben.
Erstellen Sie eine Bootklasse für SpringBoot und probieren Sie sie aus.
package com.github.apz.springsample;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import com.github.apz.springsample.component.ThymeleafText;
@SpringBootApplication
public class SpringThymeleaf3TextApplication implements CommandLineRunner {
@Autowired
private ThymeleafText thymeleafText;
public static void main(String[] args) {
new SpringApplicationBuilder(SpringThymeleaf3TextApplication.class).web(false).run(args);
}
@Override
public void run(String... args) throws Exception {
thymeleafText.process();
}
}
Vorlagendatei
Dies ist ein Thymeleaf-Textbeispiel.
[# th:if=${display}]======
Wenn die Anzeige wahr ist[# th:utext="${#dates.format(subscriptionDate, 'dd/MMM/yyyy HH:mm')}" /]Es zeigt.
======
[/]Es ist das Ende.
Thymeleaf im Textmodus behandelt [# th: Attributname] als Tag. Davon abgesehen können die Standardfunktionen von Thymeleaf bis auf wenige verwendet werden.
Das Ausführungsergebnis ist wie folgt. (Log4J2-Ausgabe wird weggelassen)
Dies ist ein Thymeleaf-Textbeispiel.
======
11 wenn die Anzeige wahr ist/7/2018 07:32 wird angezeigt.
======
Es ist das Ende.
Das war's (・ ω ・)
Appendix
Tutorial: Using Thymeleaf (ja) Tutorial: Thymeleaf + Spring
https://github.com/A-pZ/spring-thymelaf3-text
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.a-pz.sample</groupId>
<artifactId>spring-thymeleaf3-text</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-thymeleaf3-text</name>
<description>spring-thymeleaf-text-sample</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Die SpringBoot1-Serie ist standardmäßig die Thymeleaf2-Serie. Geben Sie daher 3 Serien an und fügen Sie die erforderlichen Plug-Ins hinzu.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.a-pz.sample</groupId>
<artifactId>spring-thymeleaf3-text</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>spring-thymeleaf3-text</name>
<description>spring-thymeleaf-text-sample</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.0</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring4</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>nz.net.ultraq.thymeleaf</groupId>
<artifactId>thymeleaf-layout-dialect</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
Recommended Posts