Mail template sample
@bufferingsさんのセッションでThymeleaf3からtextでも使用できることを学んだので、ちょっと試してみました。
Sample.java
package com.sample; import java.io.IOException; import java.io.Writer; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.Arrays; import java.util.Locale; import java.util.stream.Collectors; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; import org.thymeleaf.templateresolver.FileTemplateResolver; public class Sample { public static void main(String... args) { Sample sample = new Sample(); sample.createMail(Locale.JAPAN); sample.createMail(Locale.US); } private void createMail(Locale locale) { Locale.setDefault(locale); Context context = new Context(); context.setVariable("mailTo", "Hanako"); // <- mail.template ${mailTo} List<String> bodies = Arrays.asList("body1", "body2", "body3"); context.setVariable("bodies", bodies); <- set bodies as ArrayList FileTemplateResolver resolver = new FileTemplateResolver(); resolver.setPrefix("resources/"); resolver.setTemplateMode(TemplateMode.TEXT); <- *** set mode TemplateEngine engine = new TemplateEngine(); engine.addTemplateResolver(resolver); Path path = Paths.get(String.format("mail_%s.txt", locale.getLanguage())); try (Writer writer = Files.newBufferedWriter(path);) { engine.process("mail.template", context, writer); } catch (IOException e) { e.printStackTrace(); } } }
mail.template
${mailTo}と${body}の部分は、変数になるので上記のcontextでkey,valueで設定
#{greeting}は、propertyファイルより設定されるので、上記のLocaleに依存して、日本語の場合は「mail_ja_jp.properties」英語の場合は英語用を作成していないのでデフォルトの「mail.properties」を使用
基本的にtemplateと同じ名前にしておくとデフォルトで使用できます。
To:[[${mailTo}]] [[#{greeting}]] [# th:each="body : ${bodies}"] [[${body}]] [/] from [[${#locale.country}]]
mail_ja_jp.properties
greeting=こんにちは
mail.properties
greeting=Hello
実行後のmail
- mail_ja.txt
To:Hanako こんにちは body1 body2 body3 from JP
- mail_en.txt
To:Hanako Hello body1 body2 body3 from US
build.gradle
apply plugin:'java' sourceSets { main { resources { srcDir 'resources' } } } repositories { mavenCentral() } sourceCompatibility=1.8 targetCompatibility=1.8 jar { manifest { attributes 'Main-class': 'com.sample.Sample' } } dependencies { compile 'org.thymeleaf:thymeleaf:3.0.0.RELEASE' }
- 可変の内容について
上記のbodyの部分は、改行コードを使って複数行の実装していますが、th:eachとかを使いたかったのですが、実装方法が?です(汗)
もしよければコメントお願いします!
早速@bufferingsさんからコメント頂いて訂正しました。ありがとうございます!
以下のサイトも参考にしました。
Thymeleaf 3 ten-minute migration guide - Thymeleaf
以下にアップしてます。
github.com