作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有没有什么方法可以直接加载 Freemarker 模板,而无需先加载将从中加载模板的 Directory
或设置相对于模板加载的 Class
被加载。
即有什么方法可以让我加载像这样的模板
Template template = getTemplate("PathToTemplate/myTemplate.ftl");
我需要这个,因为用户指定了 ftl
文件的完整路径。所以,首先我必须将目录名和文件名分开,然后我在做
Configuration cfg = new Configuration();
int indexOfLast = templatePath.lastIndexOf("\\");
String dir = templatePath;
String fileName="";
if(indexOfLast>=0){
dir = templatePath.substring(0,indexOfLast);
fileName= templatePath.substring(indexOfLast+1,templatePath.length());
}
cfg.setDirectoryForTemplateLoading(new File(dir));
Template template = cfg.getTemplate(fileName);
我不想做这一切。
最佳答案
可以通过直接调用 Template
构造函数来创建模板,您可以将 String
或 Reader
作为参数传递给该构造函数。然后你当然可以从任何你想要的地方得到 Reader
或 String
。这种方法有两个缺点:
其他模板将无法#import
或#include
那些模板,因为 FreeMarker 不知道如何加载它们(只有您知道)
缓存这些模板(如果需要的话)由您决定
如果以上两个对您来说是个问题,那么请参阅 Seelenvirtuose 的回答:创建一个将模板名称解释为完整路径的 TemplateLoader
。
根据您的示例代码,知道每次替换 TemplateLoader
时 Configuration
实例都会清除其模板缓存。另请注意,这样做不是线程安全的。
关于java - 在不设置模板加载的目录或类的情况下在 Freemarker 模板中加载模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24927223/
我是一名优秀的程序员,十分优秀!