Java 在Freemarker模板中加载模板,而不设置用于加载模板的目录或类
是否有任何方法可以直接加载Freemarker模板,而无需首先加载将从中加载模板的Java 在Freemarker模板中加载模板,而不设置用于加载模板的目录或类,java,freemarker,Java,Freemarker,是否有任何方法可以直接加载Freemarker模板,而无需首先加载将从中加载模板的目录,或设置将加载模板的类 i、 有没有什么方法可以加载这样的模板 Template template = getTemplate("PathToTemplate/myTemplate.ftl"); 我需要这个,因为用户指定了ftl文件的完整路径。所以,首先我必须分离目录名和文件名,然后我要 Configuration cfg = new Configuration(); int indexOfLast = t
目录
,或设置将加载模板的类
i、 有没有什么方法可以加载这样的模板
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);
我不想做所有这些。getTemplate方法重载严重。根据文档,不管您调用了哪个
getTemplate
方法,最终都会调用该方法
此方法的文档说明如下:
名称的确切语法由底层TemplateLoader解释,但缓存会做出一些假设。首先,名称应该是一个层次化的路径,路径组件由斜杠字符(而不是反斜杠!)分隔。此处给出的路径(名称)不得以斜杠开头;它总是相对于“模板根目录”进行解释
有两件值得注意的事情:
name
参数已在处理分层路径,但不能以斜杠开头。因此,您可以将配置的目录设置为磁盘的根目录,然后只提供完整路径(但不带前导斜杠)getTemplate
方法重载严重。根据文档,不管您调用了哪个getTemplate
方法,最终都会调用该方法
此方法的文档说明如下:
名称的确切语法由底层TemplateLoader解释,但缓存会做出一些假设。首先,名称应该是一个层次化的路径,路径组件由斜杠字符(而不是反斜杠!)分隔。此处给出的路径(名称)不得以斜杠开头;它总是相对于“模板根目录”进行解释
有两件值得注意的事情:
name
参数已在处理分层路径,但不能以斜杠开头。因此,您可以将配置的目录设置为磁盘的根目录,然后只提供完整路径(但不带前导斜杠)可以通过直接调用
模板
构造函数来创建模板,将字符串
或读取器
作为参数传递给构造函数。当然,你可以从任何你想要的地方得到阅读器
或字符串
。但这种方法有两个缺点:
- 其他模板将无法导入或包含这些模板,因为FreeMarker不知道如何加载它们(只有您知道)
- 缓存这些模板(如果需要的话)由您决定
TemplateLoader
,将模板名称解释为完整路径
对于示例代码,要知道每次更换
TemplateLoader
时,Configuration
实例都会清除其模板缓存。还请注意,这样做不是线程安全的。可以通过直接调用模板
构造函数来创建模板,将字符串
或读取器
作为参数传递给构造函数。当然,你可以从任何你想要的地方得到阅读器
或字符串
。但这种方法有两个缺点:
- 其他模板将无法导入或包含这些模板,因为FreeMarker不知道如何加载它们(只有您知道)
- 缓存这些模板(如果需要的话)由您决定
TemplateLoader
,将模板名称解释为完整路径
对于示例代码,要知道每次更换
TemplateLoader
时,Configuration
实例都会清除其模板缓存。还请注意,这样做不是线程安全的。直接加载Freemarker模板是什么意思?它是相对于什么东西的吗?或绝对?@konstantiv.Salikhov-Its在连接的网络上<代码>直接加载模板意味着我不需要两个步骤。首先,设置加载模板的目录或路径,然后config.getTemplate('templateFile.ftl')
获取模板。相反,something.getTemplate('dir path/templateFile.ftl')
直接加载Freemarker模板是什么意思?它是相对于什么东西的吗?或绝对?@konstantiv.Salikhov-Its在连接的网络上<代码>直接加载模板意味着我不需要两个步骤。首先,设置加载模板的目录或路径,然后config.getTemplate('templateFile.ftl')
获取模板。而是something.getTemplate('dir path/templateFile.ftl')