Ich versuche, E-Mail-Vorlagen mit Thymeleaf gerendert zu haben und ich möchte das Thema und den Körper in der gleichen Datei haben, aber separat gerendert werden. Ich möchte keine Frühlingsansicht verwenden, einfach nur SpringTemplateEngine
.Render Fragment Inhalt mit Thymeleaf
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<!--/*@thymesVar id="user" type="com.myapp.user.User"*/-->
<!--/*@thymesVar id="invitationId" type="java.util.UUID"*/-->
<head>
<title th:fragment="subject">Hello <span th:text="${user.name}"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>
Hello <span th:text="${user.name}"></span>,<br>
you've been invited to join MyApp.
</p>
<p>
Click on the following link to confirm your email and setup a password:<br>
<a th:href="@{https://myapp.com/accept-invitation(id=${invitationId})}">Accept invitation</a>
</p>
<p>
Best regards,<br/>
<em>The MyApp team</em>
</p>
</body>
</html>
Es gibt mehrere Probleme mit diesem
Erstens bin ich nicht in der Lage zu bekommen machen Thymeleaf nur Inhalte von <title>
String subject = templateEngine.process(
templateFile,
ImmutableSet.of("subject"),
new Context(Locale.ENGLISH, contextVariables)
);
es literarisch macht nur Hello
- es sieht aus wie die Öffnung <title>
Das Tag wird immer entfernt und das Fragment wird direkt nach dem ersten Tag getrimmt.
Und wenn ich die ganze Vorlage machen, gibt es
<!DOCTYPE html>
<html>
<head>
Hello <span>pepa</span></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
<body>
<p>
Hello <span>pepa</span>,<br>
...
die folgende Verwendung in der <title>
macht die Ausgabe ein bisschen schöner
<span th:text="${user.name}" th:remove="tag"></span>
aber das Starttag noch fehlt.
Wenn es mir theoretisch gelingt, den Titel korrekt zu rendern, würde ich ihn immer noch in ein HTML-Tag einschließen - was natürlich nicht als E-Mail-Thema verwendet werden kann. Gibt es eine Möglichkeit, nur den Inhalt des Fragments zu rendern?
Ich würde wirklich gerne die E-Mail Betreff und Text in der gleichen Vorlage für Fälle haben, wenn ich zum Beispiel eine Iteration im Titel tun möchte, um es aus einer Liste zu generieren - ich möchte keine Zeichenfolge tun Verkettungen, ich möchte es in der Vorlage haben.
Irgendwelche Vorschläge bitte?
Entschuldigung, aber ich glaube nicht, dass Sie meine Frage verstanden haben, denn das hilft mir überhaupt nicht - und wenn, dann sehe ich nicht wie. –
Ich dachte, dass Sie nur Text innerhalb des Tags
Ja, das ist richtig. Aber ich brauche die Zeichenfolge, die es ausgibt, als E-Mail-Betreff, und ich kann keine "