gpt4 book ai didi

java - Thymeleaf handle 缺少替换件

转载 作者:行者123 更新时间:2023-12-04 08:01:59 24 4
gpt4 key购买 nike

我正在使用 Java 应用程序中的 Thymeleaf 生成我的 HTML 电子邮件。为了替换 *.html 模板中的变量,我使用了以下工作语法。

<p style="margin-top: 0px; ...;" th:inline="text">[(${myVariable})]</p>

Java代码示例如下:

String mailContent = "myTemplateLoadedFromResourcesElsewhere";
// Context already filled with variables
org.thymeleaf.context.Context ctx = EMailGenerator.getContext();
String htmlMailResult = new SpringTemplateEngine().process(mailContent, ctx.getContext());

问题是当缺少一些替换时,只有空白空间..我想保留变量名(根本不替换),或者抛出一些异常通知我丢失的信息。不幸的是,我无法在上下文或 org.thymeleaf.TemplateEngine 中找到类似的选项

最佳答案

我认为这里有两个截然不同的问题,因此可能应该将它们作为 2 个单独的 SO 问题提出。

话虽如此:


1留变量名

[[...]][(...)] 内联表达式中,您可以使用您将在 th:textth:utext 中使用的相同类型的 Thymeleaf 表达式。

因此,您可以执行以下操作:

<p style="margin-top: 0px; ...;">[(${myVariable} ?: 'myVariable is missing!')]</p>

?: 运算符将使用 ?: 右侧的值,如果左侧的值为 null。

但是,如果您要生成 HTML 内容,则根本不必使用这些内联表达式。如果您愿意,可以这样做:

<p style="margin-top: 0px; ...;" th:text="${myVariable} ?: 'myVariable is missing!'"></p>

警告:

如果您要处理用户提供的(因此不受信任的)输入,请不要使用 [(...)]th:utext。请改用 [[...]]th:text。这将确保输入中包含的任何 HTML 元素都经过安全编码。


2 抛出一些异常通知我缺少信息

这可能是一个更大的问题,取决于问题中未提供的信息,例如您需要如何收到通知,以及任何数据错误错误应该如何影响您的电子邮件(或许多电子邮件)的整体处理-邮件)。

Context already filled with variables

使用诸如 Hibernate Validator 之类的 validator 是一种在将数据加载到模板上下文之前检查 bean 字段的方法。但这假设您有一个包含相关数据的 bean。


更新:使用内联文本

如果您使用的是 th:inline="text",上述示例仍然有效。

但还有一个额外的语法可供您使用 - 表达式位于开始 [# 和结束 /] 之间。这等同于在标准 HTML 模式下使用 th:block 元素。

例子:

<div th:inline="text">
<p>
[# th:text="${myVariable} ?: 'myVariable is missing'" /]
</p>
</div>

但是,在所有这些情况下,您仍然需要了解转义 HTML 与非转义 HTML,因为这一切仍在 HTML 处理的整体上下文中发生,在您的代码中。

有关此附加语法的更多信息 here .

关于java - Thymeleaf handle 缺少替换件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66421978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com