[JAVA] Verwenden Sie den Thymeleaf-Textvorlagenmodus von Spring Boot

Einführung

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.

Vorbereitung

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.

Einstellungen für den Textmodus

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");

Tatsächliche Ausgabe

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.

  1. Erstellen Sie eine Kontextinstanz von Thymeleaf
  2. Fügen Sie die in der Thymeleaf-Vorlage verwendeten Variablen in den Kontext ein
  3. Übergeben Sie einfach die Vorlage und den Kontext, um sie in die Vorlagen-Engine zu laden und den Prozess auszuführen

Startklasse

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

Verweise

Tutorial: Using Thymeleaf (ja) Tutorial: Thymeleaf + Spring

Beispielcode

https://github.com/A-pZ/spring-thymelaf3-text

pom.xml (Spring Boot 2-Serie)

<?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>

pom.xml (Spring Boot 1 Serie)

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

Verwenden Sie den Thymeleaf-Textvorlagenmodus von Spring Boot
Versuchen Sie Spring Boot von 0 bis 100.
[Java] Thymeleaf Basic (Spring Boot)
Spring Boot + Springfox Springfox-Boot-Starter 3.0.0 Verwendung
Verwenden Sie Spring JDBC mit Spring Boot
Verwenden Sie thymeleaf3 mit parent, ohne Spring-Boot-Starter-Parent in Spring Boot anzugeben
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Verwenden Sie DBUnit für den Spring Boot-Test
Verwendung von ModelMapper (Spring Boot)
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Spring Boot ab Null Teil 2
Verwendung von Thymeleaf mit Spring Boot
Spring Boot ab Null Teil 1
Lösen Sie die Thymeleaf-Syntaxprüfung in Spring Boot
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Verwenden Sie die DynamoDB-Abfragemethode mit Spring Boot
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
Implementieren Sie CRUD mit Spring Boot + Thymeleaf + MySQL
Implementieren Sie die Paging-Funktion mit Spring Boot + Thymeleaf
Memo zur Installationsmethode von Spring Boot + Thymeleaf Boot Strap
Verwenden Sie den Cache mit EhCashe 2.x mit Spring Boot
Führen Sie die WEB-Anwendung mit Spring Boot + Thymeleaf aus
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Hallo Welt! Mit Spring Boot (Marven + Texteditor)
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Servlet-Filter mit Spring Boot verwenden [Spring Boot 1.x, 2.x kompatibel]
Erstellen Sie eine CRUD-App mit Spring Boot 2 + Thymeleaf + MyBatis
Erstellen Sie Ihr eigenes Dienstprogramm mit Thymeleaf mit Spring Boot
◆ Rufen Sie die von Spring Boot erstellte API von React ab
Fordern Sie Spring Boot heraus
Spring Boot Form
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Wenn Sie die Spring Boot + Thymeleaf-Verarbeitung trennen möchten
Customizer für Platform Transaction Manager aus Spring Boot 1.5 hinzugefügt
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Laden Sie ein externes Glas aus dem Spring Boot-Fettglas
Datei-Upload mit Spring Boot (keine mehrteilige Datei verwenden)