[JAVA] Utilisez le mode de modèle de texte Thymeleaf de Spring Boot

introduction

Thymeleaf était à l'origine un moteur de modèle pour les pages Web (HTML) et spécialisé dans la sortie HTML, mais à partir de la série Thymeleaf 3, le texte brut peut également être sorti. Cela peut également être utilisé comme modèle pour publier des e-mails et des chats.

Préparation

Dans cet article, nous préparerons une sortie texte en standard avec le minimum Spring Boot en utilisant maven. Les bibliothèques dépendantes sont différentes entre les séries SpringBoot 2 et 1. Lors de la création d'un projet, veuillez utiliser l'EDI qui peut utiliser SpringToolsSuite ou maven. pom.xml est présenté à la fin de l'article.

Paramètres du mode texte

Définissez les paramètres pour exécuter Thymeleaf en mode texte via Spring. Les modèles Thymeleaf sont gérés à partir de classes qui héritent de l'interface TemplateEngine. Cette fois, nous nous occuperons de Spring Boot, nous utiliserons donc SpringTemplateEngine pour Spring.

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;    //La série SpringBoot1 est une organisation d'importation.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;
}

Pour exécuter TemplateEngine, TemplateResolver, qui contrôle les paramètres de chargement des fichiers de modèle, est requis. Vous pouvez également transmettre le MessageSource géré par Spring afin de pouvoir générer le message à partir de la propriété de définition de message.

En écrivant cette classe, Spring peut être référencé par le nom de textTemplateEngine, et le modèle de texte est utilisé avec le contenu de TemplateResolver défini cette fois. Portez une attention particulière aux paramètres suivants dans Template Resolver.

//Répertoire de placement de fichier de modèle (src/main/resources/templates/Les répertoires suivants)
templateResolver.setPrefix("/mail/");

//Extension de fichier de modèle. Seule la valeur définie ici sera lue
templateResolver.setSuffix(".txt");

//Mode modèle Thymeleaf. Puisqu'il s'agit d'une sortie de texte, spécifiez TEXT
templateResolver.setTemplateMode(TemplateMode.TEXT);

//Codage des caractères du fichier modèle à lire
templateResolver.setCharacterEncoding("utf-8");

Sortie réelle

Maintenant que les paramètres sont terminés, la classe suivante doit sortir.

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

Pour sortir à partir du moteur de modèle Thymeleaf, procédez comme suit.

  1. Créez une instance de contexte de Thymeleaf
  2. Mettez en contexte les variables utilisées dans le modèle Thymeleaf
  3. Passez simplement le modèle et le contexte à charger dans le moteur de modèle et exécutez le processus

Classe de démarrage

Créez une classe de démarrage pour SpringBoot et essayez-la.

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();
	}
}

Fichier modèle

Ceci est un exemple de texte Thymeleaf.
[# th:if=${display}]======
Lorsque l'affichage est vrai[# th:utext="${#dates.format(subscriptionDate, 'dd/MMM/yyyy HH:mm')}" /]Ça montre.
======
[/]C'est la fin.

Thymeleaf en mode texte traite [# th: nom d'attribut] comme une balise. En dehors de cela, les fonctions standard de Thymeleaf peuvent être utilisées telles quelles, à l'exception de quelques-unes.

Le résultat de l'exécution sera le suivant. (La sortie Log4J2 est omise)

Ceci est un exemple de texte Thymeleaf.
======
11 lorsque l'affichage est vrai/7/2018 07:32 s'affiche.
======
C'est la fin.

C'est tout (・ ω ・)

Appendix

Les références

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

Exemple de code

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

pom.xml (série Spring Boot 2)

<?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 (série Spring Boot 1)

La série SpringBoot1 utilise par défaut la série Thymeleaf2, spécifiez donc 3 séries et ajoutez les plug-ins nécessaires.

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

Utilisez le mode de modèle de texte Thymeleaf de Spring Boot
Essayez Spring Boot de 0 à 100.
[Java] Thymeleaf Basic (Spring Boot)
Spring Boot + Springfox springfox-boot-starter 3.0.0 Utilisation
Utiliser Spring JDBC avec Spring Boot
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Utiliser l'authentification de base avec Spring Boot
Utiliser DBUnit pour le test Spring Boot
Comment utiliser ModelMapper (Spring boot)
Mise à niveau de la botte à ressort de la série 1.5 à la série 2.0
À partir de Spring Boot 0. Utilisez Spring CLI
Spring Boot à partir de zéro Partie 2
Comment utiliser Thymeleaf avec Spring Boot
Spring Boot à partir de zéro Partie 1
Desserrer la vérification de la syntaxe de Thymeleaf dans Spring Boot
L'histoire de la transition de Spring Boot 1.5 à 2.1
Modifications lors de la migration de Spring Boot 1.5 vers Spring Boot 2.0
Utiliser la méthode de requête DynamoDB avec Spring Boot
Modifications lors de la migration de Spring Boot 2.0 vers Spring Boot 2.2
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
Spring Boot + Thymeleaf Boot Strap Méthode d'installation mémo
Utiliser le cache avec EhCashe 2.x avec Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
Comment utiliser h2db intégré avec Spring Boot
Bonjour tout le monde! Avec Spring Boot (Marven + éditeur de texte)
Comment utiliser les attributs de session Spring Boot (@SessionAttributes)
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Créez une application CRUD avec Spring Boot 2 + Thymeleaf + MyBatis
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
◆ Obtenez l'API créée par Spring Boot à partir de React
Défi Spring Boot
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Si vous souhaitez séparer le traitement Spring Boot + Thymeleaf
Customizer pour Platform Transaction Manager ajouté à partir de Spring Boot 1.5
[Introduction à Spring Boot] Soumettez un formulaire à l'aide de thymeleaf
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Chargez un pot externe à partir du pot de graisse Spring Boot
Téléchargement de fichiers avec Spring Boot (ne pas utiliser de fichier en plusieurs parties)