当前位置:  开发笔记 > 编程语言 > 正文

从数据库加载FreeMarker模板

如何解决《从数据库加载FreeMarker模板》经验,为你挑选了2个好方法。

我想将我的FreeMarker模板存储在一个类似于以下内容的数据库表中:

template_name | template_content
---------------------------------
hello         |Hello ${user}
goodbye       |So long ${user}

当收到具有特定名称的模板的请求时,这应该导致执行查询,该查询加载相关的模板内容.然后,应将此模板内容与数据模型(上述示例中的'user'变量的值)一起传递给FreeMarker.

但是,FreeMarker API似乎假设每个模板名称对应于文件系统特定目录中的同名文件.有什么方法可以轻松地从数据库而不是文件系统加载我的模板?

编辑:我应该提到我希望能够在应用程序运行时向数据库添加模板,因此我不能简单地在启动时将所有模板加载到新的StringTemplateLoader中(如下所示).

干杯,唐



1> Ulf Lindback..:

我们使用StringTemplateLoader来加载我们从db获得的tempate(如Dan Vinton建议的那样)

这是一个例子:

StringTemplateLoader stringLoader = new StringTemplateLoader();
String firstTemplate = "firstTemplate";
stringLoader.putTemplate(firstTemplate, freemarkerTemplate);
// It's possible to add more than one template (they might include each other)
// String secondTemplate = "<#include \"greetTemplate\"><@greet/> World!";
// stringLoader.putTemplate("greetTemplate", secondTemplate);
Configuration cfg = new Configuration();
cfg.setTemplateLoader(stringLoader);
Template template = cfg.getTemplate(firstTemplate);

编辑 您不必在启动时加载所有模板.每当我们访问模板时,我们将从DB中获取它并通过StringLoader加载它,并通过调用template.process()生成(在我们的例子中)XML输出.



2> Dan Vinton..:

有两种方法:

创建TemplateLoader的新实现以直接从数据库加载模板,并在加载任何模板之前将其传递给Configuration实例setTemplateLoader().

使用在应用程序启动时从数据库配置的StringTemplateLoader.将其添加到上面的配置中.

编辑在提问的编辑的光,自己的实现TemplateLoader的样子要走的路.在这里检查Javadoc ,它只是一个简单的小接口,只有四种方法,其行为已有详细记录.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有