我可以从字符串手动渲染 Thymeleaf 模板吗?

the*_*ble 7 java spring-mvc thymeleaf

我有一个即将到来的项目,它有以下要求:

  • 使用非常简单(预计最终用户会使用它)
  • 基于Java,项目将使用Spring3编写
  • 基于字符串的加载(尽管对类似的建议开放),因为我会将模板存储在数据库中,而不是作为文件

棘手的部分似乎是让模板引擎从数据库加载模板。

我非常喜欢 Thymeleaf 的外观,但我不知道如何从字符串手动渲染模板 - 有没有人试过这个?

我愿意接受关于更好的工作技术的建议,但这是我的偏好。

Bee*_*isy 8

你可以这样做:

1.添加依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

或者,如果您不使用 spring boot,则可以仅添加 thymeleaf 依赖项。

2.配置解析器

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.ITemplateResolver;

@Configuration
public class TemplateEngineConfig {
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(templateResolver());
        return templateEngine;
    }

    private ITemplateResolver templateResolver() {
        ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
        resolver.setPrefix("templates/mail/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        resolver.setCacheable(true);
        return resolver;
    }
}
Run Code Online (Sandbox Code Playgroud)

3. 创建您的模板

src/main/resources/templates/mail/myfile.html

<html>
    <body>
    <div th:text="${myDivContent}"></div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

4. 使用渲染模板org.thymeleaf.context.Context

    Context myContext = new Context();
    myContext.setVariable("myDivContent", "Hello, the weather is foggy");

    String htmlTemplate = templateEngine.process(templateName, myContext);
Run Code Online (Sandbox Code Playgroud)

templateName一个字符串变量。这templateContext是一个org.thymeleaf.context.Contextimpl。


hub*_*rdr 0

您尝试过 UrlTemplateResolver 吗?也许您可以通过 REST 接口公开模板,以便可以通过 URL 访问原始模板。我从未尝试过这个,但似乎是可能的。否则,您可能需要实现自己的模板解析器。Thymeleaf 附带 servlet、文件、url 和类加载器模板解析器。您基本上需要为 MongoDB 编写一个。

请参阅http://www.thymeleaf.org/apidocs/thymeleaf/2.0.17/org/thymeleaf/templateresolver/package-summary.html