gpt4 book ai didi

java - 在不设置模板加载的目录或类的情况下在 Freemarker 模板中加载模板

转载 作者:行者123 更新时间:2023-11-29 03:18:46 31 4
gpt4 key购买 nike

有没有什么方法可以直接加载 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 构造函数来创建模板,您可以将 StringReader 作为参数传递给该构造函数。然后你当然可以从任何你想要的地方得到 ReaderString。这种方法有两个缺点:

  • 其他模板将无法#import#include 那些模板,因为 FreeMarker 不知道如何加载它们(只有您知道)

  • 缓存这些模板(如果需要的话)由您决定

如果以上两个对您来说是个问题,那么请参阅 Seelenvirtuose 的回答:创建一个将模板名称解释为完整路径的 TemplateLoader

根据您的示例代码,知道每次替换 TemplateLoaderConfiguration 实例都会清除其模板缓存。另请注意,这样做不是线程安全的。

关于java - 在不设置模板加载的目录或类的情况下在 Freemarker 模板中加载模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24927223/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com