我有一个即将进行的项目,它具有以下要求:
- 非常易于使用(最终用户会使用它)
- 基于Java,项目将使用Spring3编写
- 基于字符串的加载(尽管接受类似的建议),因为我将模板存储在数据库中,而不是作为文件
棘手的部分似乎是让模板引擎从数据库中加载模板。
我很喜欢 Thymeleaf 的外观,但我不知道如何从字符串手动渲染模板 - 有人试过吗?
我愿意接受为这项工作提供更好技术的建议,但这是我的偏好。
我有一个即将进行的项目,它具有以下要求:
棘手的部分似乎是让模板引擎从数据库中加载模板。
我很喜欢 Thymeleaf 的外观,但我不知道如何从字符串手动渲染模板 - 有人试过吗?
我愿意接受为这项工作提供更好技术的建议,但这是我的偏好。
你可以这样做:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
或者,如果你不使用 spring boot,你可以添加 thymeleaf 依赖。
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;
}
}
src/main/resources/templates/mail/myfile.html
:
<html>
<body>
<div th:text="${myDivContent}"></div>
</body>
</html>
org.thymeleaf.context.Context
Context myContext = new Context();
myContext.setVariable("myDivContent", "Hello, the weather is foggy");
String htmlTemplate = templateEngine.process(templateName, myContext);
是templateName
一个字符串变量。这templateContext
是一个org.thymeleaf.context.Context
实现。
您是否尝试过 UrlTemplateResolver?也许您可以通过 REST 接口公开模板,以便您可以通过 URL 访问原始模板。我从未尝试过,但似乎可行。否则,您可能需要实现自己的模板解析器。Thymeleaf 带有 servlet、文件、url 和类加载器模板解析器。您基本上需要为 MongoDB 编写一个。