用上下文变量对百里叶进行预处理

时间:2017-06-21 13:08:17

标签: thymeleaf preprocessor

我收到的字符串已经有一个百万美元标签,如下所示:

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"

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

最好将多个模板Engine bean用于String,将另一个用于资源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);

然后As @ holmis83建议直接访问模板中的变量

<span th:utext="${topSection}"></span>

答案 1 :(得分:0)

@{...}链接网址表达式。我想你想使用变量表达式 ${...}

您的代码已调整:

<span th:utext="${__${topSection}__}"></span>

请注意${topSection}必须评估为表达式,它不能是任意的Thymeleaf标记(例如th:text)。