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

以编程方式解析ELEAF模板

沈开畅
2023-03-14

我正在尝试使用Thymeleaf模板呈现XML/JSON。我不想使用模板名称渲染视图,只想解析模板,如下所示。问题是我得到的只是模板名,而不是它的内容。

设置:

@Bean
SpringResourceTemplateResolver xmlTemplateResolver(ApplicationContext appCtx) {
    SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();

    templateResolver.setApplicationContext(appCtx);
    templateResolver.setPrefix("classpath:/templates/");
    templateResolver.setSuffix(".xml");
    templateResolver.setTemplateMode(XML);
    templateResolver.setCharacterEncoding(UTF_8.name());
    templateResolver.setCacheable(false);

    return templateResolver;
}

@Bean
SpringTemplateEngine templateEngine(ApplicationContext appCtx) {
    SpringTemplateEngine templateEngine = new SpringTemplateEngine();
    templateEngine.addTemplateResolver(xmlTemplateResolver(appCtx));

    return templateEngine;
}

模板(src/main/resources/templates/早餐菜单.xml):

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
    <food>
        <name>${item['name']}</name>
        <price>${item['price']}</price>
        <description>${item['description']}</description>
        <calories>${item['calories']}</calories>
    </food>
</breakfast_menu>

用法:

@Autowired
SpringTemplateEngine templateEngine;

someMethod() {
    Context context = new Context();
    context.setVariable("item", item);
    item.put("name", "Waffle");
    String content = templateEngine.process("breakfast-menu", context);

    // content == "breakfast-menu". WTH?
}

使用Thymeleaf3.0。0.BETA01。

共有2个答案

麹高义
2023-03-14

为了完整起见,这里有一些代码来解决一个没有Spring的普通胸腺模板。这是针对超文本标记语言的,但是您可以通过为setTemplateMode调用设置另一个参数来使其适应其他模板模式:

Maven依赖:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.12.RELEASE</version>
</dependency>

Java类:

import java.util.Map;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templatemode.TemplateMode;
import org.thymeleaf.templateresolver.StringTemplateResolver;
public class ThymeleafResolver {
    public static String resolveHTMLWithThymeleaf(String html, Map<String, Object> variables) {
        TemplateEngine templateEngine = new TemplateEngine();
        StringTemplateResolver templateResolver = new StringTemplateResolver();
        templateResolver.setTemplateMode(TemplateMode.HTML);
        templateEngine.setTemplateResolver(templateResolver);
        Context context = new Context();
        context.setVariables(variables);
        return templateEngine.process(html, context);
    }
}

Testcase Java代码:

Map<String, Object> variables = new HashMap<>();
variables.put("mytext", "Hello World");
String result = ThymeleafInterpreter.interpretHTMLWithThymeleaf("<html><body><span th:text=\"${mytext}\"></span></body></html>", variables);
Assert.assertEquals("<html><body><span>Hello World</span></body></html>", result);
夏侯衡
2023-03-14

我在Thymeleaf用户论坛的帮助下解决了这个问题。由于我不知道的原因,templateEngine。addTemplateResolver不工作,但templateEngine。setTemplateResolver执行此操作。XML和JSON输出的模板如下所示:

XML:

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
    <food>
        <name th:text="${item['name']}"></name>
        <price th:text="${item['price']}"></price>
        <description th:text="${item['description']}"></description>
        <calories th:text="${item['calories']}"></calories>
    </food>
</breakfast_menu>

JSON:

{
  "food": {
    "name": "[[${item['name']}]]",
    "price": "[[${item['price']}]]",
    "description": "[[${item['description']}]]",
    "calories": "[[${item['calories']}]]"
  } 
}
 类似资料:
  • 简短:给定(groupId,artifactId,version,repository URL),我可以用编程方式让Maven解析工件URL吗? Long:给定(groupId、artifactId、version、repository URL),可以下载一个Maven工件。工件的URL通常如下所示: 方案://{repository}/{groupId}/{artifactId}/{versio

  • 我需要通过编程将符合XText语法的文本转换为符合XText从同一语法生成的Ecore元模型的AST。 我知道XText也会生成实现这种解析器的Java类,但我也不知道它们在哪里以及如何使用它。

  • 问题内容: 我需要以编程方式计算给定jar文件中已编译类,接口和枚举的数量(因此我需要三个单独的数字)。哪个API对我有帮助?(我不能使用第三方库。) 我已经尝试过非常棘手的方案,这似乎并不总是正确的。即,我将每个ZipEntry读入byte [],然后将结果提供给我的自定义类加载器,该加载器扩展了标准CalssLoader并将此byte []发送到ClassLoader.defineClass(

  • 我正在尝试使用Java解决一个数独难题。目前该类无法正确解数独。 此类尝试在9x9矩阵中查找0(空格),并在列表中记下0的位置,以供以后参考。然后,它将使用这些位置来求解该0。不幸的是,它似乎不像我希望的那样起作用。 这是我使用的9x9矩阵: 这个9x9矩阵中有51个0,但是当它解决这个难题时,出于某种奇怪的原因,它会附加66个位置。我似乎无法准确指出问题所在。任何帮助都将不胜感激! 这是它尝试的

  • 本文向大家介绍Android编程设计模式之模板方法模式详解,包括了Android编程设计模式之模板方法模式详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程设计模式之模板方法模式。分享给大家供大家参考,具体如下: 一、介绍 在面向对象开发过程中,通常会遇到这样的一个问题,我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序,但是,某些步骤的具体实现是未知的,或者说

  • 问题内容: 我正在尝试使用JAVA解析JFR转储。我关注了这个博客,http://hirt.se/blog/?p=446。但是现在不推荐使用这些方法。JFR到JAVA是否有任何受支持的解析器?如果不能,您能否指出我是否可以从JFR转储中检索数据? 问题答案: 正如Klara提到的那样,没有官方支持的解析器。希望JDK 9将正式支持JFR解析器。现在,您可以使用Hirt博客中提到的API 。不用担心