我尝试使用Thymeleaf呈现电子邮件模板,我希望将主题和正文放在同一个文件中,但需要单独呈现。我不想使用弹簧视图,只是简单的SpringTemplateEngine
。
<!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>
这个有几个问题
首先,我无法让Thymeleaf仅呈现<title>
的内容
String subject = templateEngine.process(
templateFile,
ImmutableSet.of("subject"),
new Context(Locale.ENGLISH, contextVariables)
);
它仅呈现文学作品Hello
- 看起来始终会删除开始<title>
标记,并且片段在第一个标记之后立即修剪。
当我渲染整个模板时,它会返回
<!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>
...
在<title>
中使用以下内容可使输出更好
<span th:text="${user.name}" th:remove="tag"></span>
但开场标签仍然缺失。
当我理论上成功地正确呈现标题时,我仍然将它包装在HTML标签中 - 这显然不能用作电子邮件主题。有没有办法只渲染片段的内容?
我真的希望将电子邮件主题和正文放在同一模板中用于案例,例如我想在标题中进行一些迭代以从列表中生成它 - 我不想做任何字符串连接,我想在模板中使用它。
有什么建议吗?
答案 0 :(得分:-1)
如果您只想包含片段的内容,假设您的片段名为 your_fragment.html ,并且位于 / resources / templates / fragments 下,则可以做:
EventTrigger
和your_fragment.html:
Uri lvUri = FileProvider.getUriForFile(pActivity, BuildConfig.APPLICATION_ID + ".provider", pFile);
Intent intent = new Intent(pAction);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { });
intent.putExtra(Intent.EXTRA_SUBJECT, "EXTRA_SUBJECT");
intent.putExtra(Intent.EXTRA_TEXT, "EXTRA_TEXT");
intent.putExtra(Intent.EXTRA_STREAM, lvUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
intent.setType("application/xml");
这将呈现:
<head>
<title th:replace="fragments/your_fragment::your_fragment"/></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>