如何在 FreeMarker 中将字符串作为输入传递? [复制]

Posted

技术标签:

【中文标题】如何在 FreeMarker 中将字符串作为输入传递? [复制]【英文标题】:How to pass String as input in FreeMarker? [duplicate] 【发布时间】:2013-07-18 18:10:43 【问题描述】:

所有模板都存储在数据库中。我必须从数据库中获取模板的内容并用 freemarker 标记。最终输出将呈现在文本框中。

但是,我没有找到任何可以发送字符串而不是文件名的方法。

请提出建议。

【问题讨论】:

【参考方案1】:

您可以使用StringReader 将模板传递给Template 构造函数:

  // Get your template as a String from the DB
  String template = getTemplateFromDatabase();
  Map<String, Object> model = getModel();

  Configuration cfg = new Configuration();
  cfg.setObjectWrapper(new DefaultObjectWrapper());

  Template t = new Template("templateName", new StringReader(template), cfg);

  Writer out = new StringWriter();
  t.process(model, out);

  String transformedTemplate = out.toString();

【讨论】:

注意,如果你想要好的性能,在每个模板处理之前不应该重新创建(或重新配置)Configuration;它应该是一个单例。此外,在某些应用程序中,一次又一次地重新解析模板(对于字符串)可能太慢了;在这种情况下,可以使用自定义TemplateLoader(与cfg.setTemplateLoader 一起)从数据库中按名称加载模板,因为这样FreeMarker 将缓存Template 对象。 (当然,您也可以编写自己的缓存机制来重用Template-s。) 在最新版本的 Freemarker 中,您似乎可以只传递一个字符串而无需将其包装在 StringReader 如果您试图允许用户测试模板怎么办? IE系统有两种使用方式。正常的用例是从数据库加载(我有一个自定义的TemplateLoader),但我也希望用户能够在编辑模板时对其进行测试。对于第一种情况,我有我的单例实例,为后一种情况更新 Configuration 是否合理?

以上是关于如何在 FreeMarker 中将字符串作为输入传递? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在freemarker模板中将字符串转换为数字

如何在freemarker中将日期转换为字符串?

在 Freemarker 中将字符串转换为 JSON

在 Freemarker 宏中模拟空参数

在python 3中将参数传递给exec

如何使用扫描仪在java中将输入作为带有空格的字符串