Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在FreeMarker中传递字符串作为输入?_Java_Freemarker - Fatal编程技术网

Java 如何在FreeMarker中传递字符串作为输入?

Java 如何在FreeMarker中传递字符串作为输入?,java,freemarker,Java,Freemarker,所有模板都存储在数据库中。我必须从数据库中获取模板的内容,并用freemarker标记。最终输出将在文本框中呈现 但是,我没有找到任何方法,可以通过它发送字符串而不是文件名 请建议。您可以通过以下方式将模板传递给构造函数: //从数据库中以字符串形式获取模板 字符串模板=getTemplateFromDatabase(); Map model=getModel(); Configuration cfg=新配置(); setObjectWrapper(新的DefaultObjectWrapper(

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

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


请建议。

您可以通过以下方式将模板传递给构造函数:

//从数据库中以字符串形式获取模板
字符串模板=getTemplateFromDatabase();
Map model=getModel();
Configuration cfg=新配置();
setObjectWrapper(新的DefaultObjectWrapper());
模板t=新模板(“模板名称”,新StringReader(模板),cfg);
Writer out=新的StringWriter();
t、 过程(模型、输出);
字符串transformedTemplate=out.toString();

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