使用上下文变量在 thymeleaf 中进行预处理
pre processing in thymeleaf with context variable
我得到一个字符串,其中已经有如下的 thymeleaf 标签:
String html = "<span th:text="${fisrtText}"></span> Indicative Terms for a <span th:text="${currency}"></span><span th:text="${amount}"></span>M <span th:text="${type}"></span> Facility";
我将上面的字符串设置为上下文变量:
context.setVariable("topSection", html);
我正在设置上下文变量,其值用于替换上面字符串中的标签:
org.thymeleaf.context.Context context = new org.thymeleaf.context.Context();
context.setVariable("fisrtText", "This is fisrt Text");
context.setVariable("currency", "$");
context.setVariable("amount", 256.10);
context.setVariable("type", "Loan");
现在 template.html 我正在尝试按如下方式获取它:
<span th:utext="@{__${topSection}__}"></span>
我希望将 html 字符串替换为上下文中可用的值。但它返回相同的html,因为它没有任何处理:
<span th:text="${fisrtText}"></span> Indicative Terms for a <span th:text="${currency}"></span><span th:text="${amount}"></span>M <span th:text="${type}"></span> Facility"
如有任何帮助,我们将不胜感激。
@{...}
是一个 link URL 表达式。我认为您想使用 变量表达式 ${...}
.
您的代码已调整:
<span th:utext="${__${topSection}__}"></span>
请注意 ${topSection}
必须计算为一个表达式,它不能是任意的 Thymeleaf 标记(例如 th:text
)。
最好使用多个模板引擎 bean,一个用于字符串,另一个用于资源 HTML 文件。
1) 对于资源文件
@Bean(name ="templateEngine")
public SpringTemplateEngine getTemplateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(new ClassLoaderTemplateResolver(););
templateEngine.setMessageSource(messageSource);
templateEngine.setTemplateEngineMessageSource(messageSource);
return templateEngine;
}
您可以为ClassLoaderTemplateResolver设置前缀和后缀。
2) 字符串模板解析器:
@Bean(name ="stringTemplateEngine")
public SpringTemplateEngine getTemplateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(new StringTemplateResolver(););
return templateEngine;
}
现在首先使用 stringTemplateEngine 解析带有 thymeleaf 标签的字符串变量。
String html = "<span th:text="${fisrtText}"></span>";
String parsedHtml = stringTemplateEngine.process(html,context);
现在将 ParsedHtml 置于上下文中。
context.setVariable("topSection", parsedHtml);
然后正如@holmis83 建议直接访问模板中的变量
<span th:utext="${topSection}"></span>
我得到一个字符串,其中已经有如下的 thymeleaf 标签:
String html = "<span th:text="${fisrtText}"></span> Indicative Terms for a <span th:text="${currency}"></span><span th:text="${amount}"></span>M <span th:text="${type}"></span> Facility";
我将上面的字符串设置为上下文变量:
context.setVariable("topSection", html);
我正在设置上下文变量,其值用于替换上面字符串中的标签:
org.thymeleaf.context.Context context = new org.thymeleaf.context.Context();
context.setVariable("fisrtText", "This is fisrt Text");
context.setVariable("currency", "$");
context.setVariable("amount", 256.10);
context.setVariable("type", "Loan");
现在 template.html 我正在尝试按如下方式获取它:
<span th:utext="@{__${topSection}__}"></span>
我希望将 html 字符串替换为上下文中可用的值。但它返回相同的html,因为它没有任何处理:
<span th:text="${fisrtText}"></span> Indicative Terms for a <span th:text="${currency}"></span><span th:text="${amount}"></span>M <span th:text="${type}"></span> Facility"
如有任何帮助,我们将不胜感激。
@{...}
是一个 link URL 表达式。我认为您想使用 变量表达式 ${...}
.
您的代码已调整:
<span th:utext="${__${topSection}__}"></span>
请注意 ${topSection}
必须计算为一个表达式,它不能是任意的 Thymeleaf 标记(例如 th:text
)。
最好使用多个模板引擎 bean,一个用于字符串,另一个用于资源 HTML 文件。
1) 对于资源文件
@Bean(name ="templateEngine")
public SpringTemplateEngine getTemplateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(new ClassLoaderTemplateResolver(););
templateEngine.setMessageSource(messageSource);
templateEngine.setTemplateEngineMessageSource(messageSource);
return templateEngine;
}
您可以为ClassLoaderTemplateResolver设置前缀和后缀。
2) 字符串模板解析器:
@Bean(name ="stringTemplateEngine")
public SpringTemplateEngine getTemplateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(new StringTemplateResolver(););
return templateEngine;
}
现在首先使用 stringTemplateEngine 解析带有 thymeleaf 标签的字符串变量。
String html = "<span th:text="${fisrtText}"></span>";
String parsedHtml = stringTemplateEngine.process(html,context);
现在将 ParsedHtml 置于上下文中。
context.setVariable("topSection", parsedHtml);
然后正如@holmis83 建议直接访问模板中的变量
<span th:utext="${topSection}"></span>