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