Mail template sample

@さんのセッションで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とかを使いたかったのですが、実装方法が?です(汗)
もしよければコメントお願いします!
早速@さんからコメント頂いて訂正しました。ありがとうございます!
以下のサイトも参考にしました。
Thymeleaf 3 ten-minute migration guide - Thymeleaf

以下にアップしてます。
github.com