当前位置: 首页 > 知识库问答 >
问题:

使用Thymeleaf呈现片段内容

李星辰
2023-03-14

我正在尝试使用Thymeleaf呈现电子邮件模板,我希望主题和正文在同一个文件中,但分别呈现。我不想使用spring视图,只想使用普通的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仅渲染

String subject = templateEngine.process(
    templateFile,
    ImmutableSet.of("subject"),
    new Context(Locale.ENGLISH, contextVariables)
);

它只呈现文字Hello-看起来像开头的

当我渲染整个模板时,它会返回

<!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>
...

<span th:text="${user.name}" th:remove="tag"></span>

但是开头的标签仍然不见了。

理论上,当我能够正确呈现标题时,我仍然会将其包装在一个HTML标记中——这显然不能用作电子邮件主题。有没有办法只渲染片段的内容?

我真的希望电子邮件主题和正文都在同一个模板中,例如,当我想在标题中进行一些迭代以从列表中生成它时-我不想做任何字符串连接,我想在模板中使用它。

有什么建议吗?


共有1个答案

翟沈义
2023-03-14

如果您只想包含片段的内容,假设您的片段称为您的_片段。html并放置在/resources/templates/fragments下,您可以执行以下操作:

<head>
  <title th:replace="fragments/your_fragment::your_fragment"/></title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>

your_fragment.html:

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head></head>
<body>
    <div th:fragment="your_fragment" th:remove="tag">
      Hello <span th:text="${user.name}" th:remove="tag"></span>
    </div>
</body>
</html>

这将导致:

<head>
  Hello username
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
</head>
 类似资料:
  • 我正在使用jetpack导航从片段过渡到细节片段。 我需要帮助在显示细节片段的片段上显示细节片段。 请看下面的照片,看看我正在努力实现什么: 我也在导航图中的动画上使用基本的fade_in/fade_out。 这是我得到的结果: 如何设置转换以使细节片段显示在呈现视图上? 这是我所有的进步: 底部导航菜单 导航图 主要活动。kt Tab1片段(这是带有埃菲尔铁塔图像的片段 赏金编辑: 我希望在导航

  • 我正在研究AEM的新功能“内容片段”,该功能在AEM 6.2中引入,并在6.3中进一步增强,但我对内容片段的实际使用情况不是很清楚,需要更多了解。 内容片段适用于长文章页面或新闻页面,但我不认为它可以用于所有类型的创作,对吗 我还有一些其他的问题,但是,上面三个将有助于真正理解实际的用例场景,为其创建了这个功能。 问候高拉夫

  • 我正在用Spring MVC3.2和Thymeleaf模板引擎构建应用程序。我是沉香酒的初学者。 我有一切工作,包括Thymeleaf,但我想知道是否有人知道一个简单明了的图图如何做简单的Ajax请求控制器,结果只呈现一个模板的一部分(片段)。

  • 我用jQuery将一些包含数学的内容加载到html文件中。现在我想让Mathjax排版这个新内容,但它不起作用。这就是我的JavaScript代码的样子 但它只加载内容,不应用MathJax。有什么建议说明它为什么不起作用吗? 编辑我添加了第二个按钮,带有第二次单击功能,运行以下脚本 如果我单击第一个按钮,它将加载新内容,而不应用MathJax。如果现在单击第二个按钮,它会将MathJax应用于新

  • 我试图在我的PDF模板中包含一个字母头,如下所示: 片断/header.html template.html html位于app/src/main/resources/template/pdf/文件夹中。我必须包括css和图像文件与完整的路径(从项目的根),以使它们工作。我尝试包含完整路径的片段(如上),只包含片段/头,但每次都得到相同的错误。 我正在使用 Spring-Boot-Starter-

  • 我试图在Thymeleaf模板中动态创建Javascript,以便使用GoogleChart的Timeline包(注意:Google库的Spring版本中没有这个包)。 我有一个胸腺素片段的值。包含以下代码的html,然后将其包含在实际页面中: 在我的GantController类中,我有以下代码: 字符串参数=“['MegaCorp应用程序1',新日期(2018,7,2),新日期(2019,4,