2016-10-07 63 views
1

我编写了一个java程序,其中必须呈现ftl并在String变量中获取输出。 请在下面找到我的代码:尝试获取ftl模板时未找到文件异常

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。根据http://viralpatel.net/blogs/freemaker-template-hello-world-tutorial/其罚款。但我无法弄清楚为什么我会得到例外。有人可以帮帮我吗?

提前致谢!

回答

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"保持不变,因为有你比较指定模板目录的路径。

+0

非常感谢..这解决了我的问题:) –

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”

注:如果您使用窗口确保您的文件没有hidden extension

+0

@roremy:感谢您的快速回复......我需要构建jar并使用它。所以,如果我硬编码路径,如果其他人使用这个jar,它将不起作用。 –

+0

在这种情况下,您可以执行以下两项操作之一:将项目路径添加到PATH环境变量,或将该文件插入通用和公共目录,以使组织的任何其他成员都可以访问该目录。对于本地检查(确保可以在自己的计算机上使用该文件),可以使用完整的硬编码路径,这是解决该错误的一小步。 – Rotem

0

我建议你使用的方法getResource()方法,例如,在这种情况下:

setIconImage(Toolkit.getDefaultToolkit().getImage(Menu.class.getResource("/resource/profut_1.PNG")));