我写了一个java程序,我必须在其中渲染一个ftl并获取String变量的输出。 请在下面找到我的代码:
Configuration cfg = new Configuration();
StringWriter stringWriter = new StringWriter();
try
{
Template template = cfg.getTemplate("src/response.get.html.ftl");
model.put("content",contextModel);
template.process(model, stringWriter);
System.out.println(stringWriter);
}
但是Template template = cfg.getTemplate("src/response.get.html.ftl");
我已将我的回复文件放在 src 和我的java文件包 com.test.webscripts 中。根据{{3}}它的罚款。但我无法弄清楚为什么我会得到例外。有人可以帮助我吗?
提前致谢!
答案 0 :(得分:1)
通常src
在运行时不可访问,因为它只适用于编译器和其他构建工具。构建完成后,应用程序应该只依赖于构建的输出(“二进制”),即使在IDE中src
仍然存在(与部署应用程序时不同)。
此外,您还没有显示您使用的TemplateLoader
。你应该做这样的事情:
cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/");
然后:
cfg.getTemplate("response.get.html.ftl");
创建子目录是一种更安全的做法,比方说com/mycompany/myapp/templates
,并将模板放在那里。在这种情况下,你需要这个:
cfg.setClassForTemplateLoading(SomeClassInMyApp.class, "/com/mycompany/myapp/templates");
请注意,cfg.getTemplate("response.get.html.ftl"
保持不变,因为您指定了相对于模板目录的路径。
答案 1 :(得分:0)
请检查您的PATH环境变量,它是否包含工作区的路径和项目路径?如果不是,那可能会导致错误。
解决错误的另一种简单方法是更改以下行中的路径:
模板模板= cfg.getTemplate(“src / response.get.html.ftl”);
而不是'src / response.get.html.ftl'插入从根目录到文件的完整路径。即:'c://workspac/username/com/companyname/projectName/src/response.get.html.ftl'
注意:如果您正在使用Windows,请确保您的文件没有hidden extension。
答案 2 :(得分:0)
我建议您使用方法getResource(),例如,在这种情况下:
setIconImage(Toolkit.getDefaultToolkit().getImage(Menu.class.getResource("/resource/profut_1.PNG")));