使用上下文变量在 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>