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

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

岳毅
2023-03-14

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

  • 使用非常简单(预期最终用户会使用它)

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

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

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

共有2个答案

阚允晨
2023-03-14

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

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

鲁洋
2023-03-14

您可以这样做:

xml prettyprint-override"><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

或者,如果你不使用Spring引导,你可以只添加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/资源/模板/邮件/myfile.html

<html>
    <body>
    <div th:text="${myDivContent}"></div>
    </body>
</html>
    Context myContext = new Context();
    myContext.setVariable("myDivContent", "Hello, the weather is foggy");

    String htmlTemplate = templateEngine.process(templateName, myContext);

templateName是一个字符串变量。templateContext是一个组织。百里香。上下文上下文impl。

 类似资料:
  • 问题内容: 我正在尝试呈现一段动态路线上可用的html,该路线是通过调用获取的,它返回了一段html, 仅举一个例子,我尝试加载此html部分: 我做了一个小提琴,以模拟问题,但是为了简单起见,我省去了http调用,只是将html添加到了作用域中的字符串中。 控制器是: 页面html是这样的: 问题在于,它不会将字符串添加到html文件(ng-include)中,但是会明显地对由该字符串组成的ur

  • 6.1 渲染模板 一旦你拥有一个模版文件,你可以通过给一个map来给它传递数据。 map是一个变量及赋予的值的集合,模板使用它来得到变量的值,或者对于块标签求值。 它的渲染函数有一个可选的变量键值对map 通过 ctx.Render() 方法来渲染模板,例如: func (r *Render) Serve(ctx *faygo.Context) error { return ctx.Ren

  • 英文原文: http://emberjs.com/guides/templates/rendering-with-helpers/ Ember.js提供了数个助手来协助你以不同的方式来渲染其他视图或模板 {{partial}} 助手 {{partial}}接收一个模板作为其参数,然后恰当地渲染这个模板 {{partial}}不改变上下文或作用域。它只是简单地在当前作用域下将指定的模板渲染出来。 1

  • 问题内容: 我正在尝试在angularjs中实现一个插件系统,该系统将允许用户配置他们将在特定页面上看到的“小部件”。每个窗口小部件均由控制器和模板(URL)定义。是否可以创建一个实例化控制器,使用模板调用它并包含结果内容的指令? 目标是这样的: 问题答案: 有两种方法可以做到这一点; 一种是使用已经可用的helper指令(例如和),第二种是手动的;手动版本 可能 会更快,但我不确定。 简单方法:

  • Tango默认核心不包含模板渲染功能,在官方中间件中包含两个渲染引擎中间件,一个是 Go标准模板引擎, 另一个是 Pongo2模板引擎

  • 在控制器里模板渲染最常用的方法是display,在CMF中支持如下的模板渲染方式: //不带任何参数 $this->display(); 此种方式系统会自动判断模板路径,并渲染出模板内容,此种方式模板路径是:主题名/应用名/控制器名/操作名+模板文件后缀名; $this->display('edit'); 此种方式表示调用此控制器下的edit操作的模板; $this->display(':in