我正在尝试设置一个自由标记模板来显示SQL查询的结果。我遇到了Intellij报告无法找到模板的问题:
DEBUG [2018-02-27 18:52:31,623] freemarker.cache: Couldn't find template in cache for "com/example/www/resources/template.ftl"("en_US", ISO-8859-1, parsed); will try to load it.
DEBUG [2018-02-27 18:52:31,624] freemarker.cache: TemplateLoader.findTemplateSource("com/example/www/resources/template_en_US.ftl"): Not found
DEBUG [2018-02-27 18:52:31,626] freemarker.cache: TemplateLoader.findTemplateSource("com/example/www/resources/template_en.ftl"): Not found
DEBUG [2018-02-27 18:52:31,627] freemarker.cache: TemplateLoader.findTemplateSource("com/example/www/resources/template.ftl"): Not found
DEBUG [2018-02-27 18:52:31,661] org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor: org.eclipse.jetty.server.handler.gzip.GzipHttpOutputInterceptor@f62788 exclude by status 404
DEBUG [2018-02-27 18:52:31,662] org.eclipse.jetty.server.HttpChannel: sendResponse info=null content=HeapByteBuffer@d1e062[p=0,l=248,c=32768,r=248]={<<<<html>\n<head>\n<me.../body>\n</html>\n>>>\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00} complete=true committing=true callback=Blocker@4fab4a{null}
DEBUG [2018-02-27 18:52:31,662] org.eclipse.jetty.server.HttpChannel: COMMIT for /address/3 on HttpChannelOverHttp@a67c6b{r=1,c=true,a=DISPATCHED,uri=//localhost:8080/address/3}
404 Not Found HTTP/1.1
Date: Tue, 27 Feb 2018 18:52:31 GMT
Cache-Control: must-revalidate,no-cache,no-store
Content-Type: text/html;charset=iso-8859-1
当我的app类中的main方法设置如下时,就会发生这种情况:
public class AppApplication extends Application<AppConfiguration> {
public static void main(final String[] args) throws Exception {
new AppApplication().run(args);
}
在此设置下,导航到返回地址数据库的URL会在浏览器中返回404错误,上面的日志会以调试模式返回。
在Dropwizard中使用Freemarker的其他研究使我在应用程序的main方法中设置了一个Configuration实例,用setDirectoryForTemplateLoading查找模板,指向路径,并使用getTemplate返回模板文件本身:
public class AppApplication extends Application<AppConfiguration> {
public static void main(final String[] args) throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_27);
cfg.setDirectoryForTemplateLoading(new File("C:\\IdeaProjects\\App\\src\\main\\resources"));
cfg.getTemplate("template.ftl");
cfg.setDefaultEncoding("UTF-8");
cfg.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
cfg.setLogTemplateExceptions(false);
cfg.setWrapUncheckedExceptions(true);
new AppApplication().run(args);
}
但是,转到URL会返回相同的错误。在这种情况下唯一可辨别的区别是,当服务器启动时,错误信息将打印在控制台顶部:
14:09:24.891 [main] DEBUG freemarker.cache - Couldn't find template in cache for "template.ftl"("en_US", UTF-8, parsed); will try to load it.
14:09:24.907 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("template_en_US.ftl"): Not found
14:09:24.907 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("template_en.ftl"): Not found
14:09:24.907 [main] DEBUG freemarker.cache - TemplateLoader.findTemplateSource("template.ftl"): Found
14:09:24.922 [main] DEBUG freemarker.cache - Loading template for "template.ftl"("en_US", UTF-8, parsed) from "C:\\IdeaProjects\\App\\src\\main\\resources\\template.ftl"
最后,它显示它是从资源文件夹加载模板;但是,尝试运行我定义的getter方法稍后会在控制台中返回相同的错误。有人能给我一些见解吗?我不认为这是我的代码的问题,而是.ftl文件没有重新发布到Intellij。
编辑:这是我的View Bundle,初始化。:
bootstrap.addBundle(new ViewBundle<AppConfiguration>() {
public Map<String, Map<String, String>> getViewConfiguration(AppConfiguration configuration) {
return configuration.getViewRendererConfiguration();
}
});