【发布时间】:2013-07-18 18:10:43
【问题描述】:
所有模板都存储在数据库中。我必须从数据库中获取模板的内容并用 freemarker 标记。最终输出将呈现在文本框中。
但是,我没有找到任何可以发送字符串而不是文件名的方法。
请提出建议。
【问题讨论】:
标签: java freemarker
所有模板都存储在数据库中。我必须从数据库中获取模板的内容并用 freemarker 标记。最终输出将呈现在文本框中。
但是,我没有找到任何可以发送字符串而不是文件名的方法。
请提出建议。
【问题讨论】:
标签: java freemarker
您可以使用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。)
StringReader
TemplateLoader),但我也希望用户能够在编辑模板时对其进行测试。对于第一种情况,我有我的单例实例,为后一种情况更新 Configuration 是否合理?