我可以从String手动渲染Thymeleaf模板吗?

时间:2013-06-13 11:00:58

标签: java spring-mvc thymeleaf

我有一个即将开展的项目有以下要求:

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

这个棘手的部分似乎是获取一个模板引擎来从数据库加载模板。

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

我愿意为这项工作提供更好的技术建议,但这是我的偏好。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

你可以这样做 1.添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

或者,如果你不使用弹簧靴,你可以添加百里香依赖。

2.config resolver。

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.TemplateResolver;
@Configuration
public class TemplateEngineConfig {
    @Bean
    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.addTemplateResolver(templateResolver());
        return templateEngine;
    }

    private TemplateResolver templateResolver() {
        TemplateResolver resolver = new ClassLoaderTemplateResolver();
        resolver.setPrefix("templates/mail/");
        resolver.setSuffix(".html");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        resolver.setCacheable(true);
        return resolver;
    }
}
  1. 渲染模板。
  2. String htmlTemplate = templateEngine.process(templateName, templateContext);

    templateName是一个字符串变量。 templateContextorg.thymeleaf.context.Context impl。

答案 2 :(得分:0)

Thymeleaf是“XML,XHTML和HTML5的Java模板引擎”。如defined in Wikipedia,字符串可能会出现问题。

因此,您可以压缩模板并将tar保存在数据库BLOB中。

我找到了一个OpenSource XML database,对你的项目肯定有用。