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

在TEXT模板中定义并插入Thymeleaf片段

孟树
2023-03-14

我正在尝试用Thymeleaf创建纯文本和HTML的电子邮件模板。因为我不想复制公共部分,所以我想单独定义这些部分,并将它们插入到更具体的模板中。

它适用于超文本标记语言,但对于普通文本变量中的公共部分不被替换:

超文本标记语言

>

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div th:fragment="header">
            <p>
                Hello, [( ${name} )]
            </p>
        </div>
        <div th:fragment="footer">
            <p>
                Bye.
            </p>
        </div>
    </body>
</html>

具体的html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <div th:replace="html/common::header"></div>
        <p>
            <a th:href="${myLink}">[( ${myLink} )]</a>
        </p>
        <div th:replace="html/common::footer"></div>
    </body>
</html>

纯文本

>

  • header.txt

    Hello ${name}
    

    页脚。文本

    Bye
    

    具体的文本

    [( ~{text/header} )]
    [( ${myLink} )]
    [( ~{text/footer} )]
    

    后果

    对于超文本标记语言,这一切都很好,但是对于纯文本版本,插入的header.txt模板中的${name}变量不会被替换:

    Hello, [#th:block th:utext="${name}"][/th:block]
    
        http://example.com
    
    Bye.
    

    超文本标记语言结果看起来正确:

    <!DOCTYPE html>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <body>
            <div>
                <p>
                    Hello, name-value
                </p>
            </div>
            <p>
                <a href="http://example.com">http://example.com</a>
            </p>
            <div>
                <p>
                    Bye.
                </p>
            </div>
        </body>
    </html>
    

    我的问题

    • 对于纯文本版本有一个优雅的解决方案吗
  • 共有1个答案

    史昀
    2023-03-14

    对于纯文本问题,您可以使用[#th: block]语法。

    具体来说,不要在你的specific.txt中使用这个:

    [( ~{text/header} )]
    

    您可以使用以下选项:

    [#th:block th:replace="text/header"][/th:block]
    

    另外,在标题中。txt文件,而不是使用此文件:

    Hello ${name}
    

    您需要使用以下选项:

    Hello [( ${name} )]
    

    这是您已经使用过的表达式内联,在这里提供,以供参考。

    这里给出了[#th: block]语法的一些附加示例。

    您可能认为[#th:block]语法现在允许我们使用片段,方式与HTML方法类似。例如,类似这样的内容:

    DOES NOT WORK:
    [#th:block th:replace="text/common :: header"][/th:block]
    

    连同一个通用。txt像这样的片段:

    ALSO DOES NOT WORK:
    [#th:block th:fragment="header"]
    Hello, [( ${name} )]
    [/th:block]
    

    如果尝试此操作,将出现以下错误:

    JAVAlang.IllegalArgumentException:无法使用文本模板模式为模板指定模板选择器:模板插入操作必须始终对整个模板文件而不是片段执行

    如果您还没有看到或使用它,那么我在这里要提到的另一件事就是参数化片段。它们可以使HTML片段更加灵活和可重用。

     类似资料:
    • 我需要在电子邮件模板(thymeleaf)中插入样式。我需要为几个模板制作一个通用的css文件。 使用Spring引导1.3.3 我试图遵循以下帖子中的内容:Thymeleaf CSS SpringBoot 电子邮件文件:资源 我为邮件使用WebContext(我以前使用上下文,但上下文不接受相对路径,需要WebContext)。 在我的css: 在我的模板中: 结果是邮件被发送,但css样式没有

    • 正如我们已经描述过的,模板可以使用在数据模型中定义的变量。 在数据模型之外,模板本身也可以定义变量来使用。 这些临时变量可以使用FTL指令来创建和替换。请注意每一次的 模板执行 工作都维护它自己的私有变量, 同时来渲染页面。变量的初始值是空,当模板执行工作结束这些变量便被销毁了。 可以访问一个在模板里定义的变量,就像是访问数据模型根root上的变量一样。 这个变量比定义在数据模型中的同名参数有更高

    • 在尝试为Sublime Text 2编写自己的片段时,我遇到了以下两个问题: > 查找作用域键。我发现我可以逐个查看我的包并找到对声明的“scope”属性的引用。例如,在(我的HTML包中的一个文件)中,有以下两行: 因此,如果我希望我当前的片段在javascript文件上工作,我将我的范围定义为: 我假设所有这些范围键都是根据我安装的软件包即时定义的。Sublime Text是否在我可以更容易引

    • 在 cmf中模板就是一个 html 文件,可分为前台模板文件和后台模板文件; 前台模板位于 themes 目录下,后台模板位于 admin/themes 目录下,前后台都是多主题机制的,可以分开设置不同的主题; 前台默认模板是 simplebootx,以后也可能会换,我们先以这个为例; 这是前台模板的结构;应用之间彼此分开,Portal目录下就对应的是application/Portal应用的模板

    • 本文向大家介绍SpringBoot中的Thymeleaf模板,包括了SpringBoot中的Thymeleaf模板的使用技巧和注意事项,需要的朋友参考一下 一、前言     Thymeleaf 的出现是为了取代 JSP,虽然 JSP 存在了很长时间,并在 Java Web 开发中无处不在,但是它也存在一些缺陷: 1、JSP 最明显的问题在于它看起来像HTML或XML,但它其实上并不是。大多数的JS

    • 问题内容: Helm允许在Kubernetes的资源文件中使用Go模板。 通常使用一个名为的文件通过以下语法定义Go模板助手: 然后可以在资源文件中使用它,如下所示: 问题 如何在其他帮助程序定义中使用定义的帮助程序? 例如,如果我有一个用于应用程序名称的助手,并想在定义入口主机名的助手的定义中使用该助手,该怎么办? 我尝试了几种其他方式来调用其他定义中的帮助器。鉴于此基本辅助功能: 我尝试了以下