【问题标题】:Can I render Thymeleaf templates manually from a String?我可以从字符串手动渲染 Thymeleaf 模板吗?
【发布时间】:2013-06-09 17:46:39
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: java spring-mvc thymeleaf


    【解决方案1】:

    你可以这样做:

    1。添加依赖

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

    或者,如果你不使用 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;
        }
    }
    

    3。创建您的模板

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

    <html>
        <body>
        <div th:text="${myDivContent}"></div>
        </body>
    </html>
    

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

        Context myContext = new Context();
        myContext.setVariable("myDivContent", "Hello, the weather is foggy");
    
        String htmlTemplate = templateEngine.process(templateName, myContext);
    

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

    【讨论】:

    • 我们如何初始化 templateContext bean?应该在第 2 步中吗?
    【解决方案2】:

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

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

    【讨论】:

    • 我会试试这个,它看起来比我想象的更好
    猜你喜欢
    • 2016-02-02
    • 2019-08-25
    • 2017-11-27
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多