在使用jfinal template engine的时候,如果设置了BaseTemplatePath,需要按照如下配置,不然会提示模版文件找不到。
public void configEngine(Engine me) { me.setBaseTemplatePath(me.getBaseTemplatePath() + "/themes"); }
分析:
如果没有指定BaseTemplatePath,默认的路径为当前webroot的绝对路径,但是配置了BaseTemplatePath以后,使用的直接就是配置的路径了,在寻找模版文件的时候调用如下代码,会出现FileNotFoundException。
public static StringBuilder loadFile(String fileName, String encoding) { File file = new File(fileName); if (!file.exists()) { throw new RuntimeException("File not found : " + fileName); } }
所以需要在配置的时候加上原本的绝对路径,如下
me.getBaseTemplatePath() + "/themes"
问题:
一般配置BaseTemplatePath这个基础路径应该是相对于webroot来配置基础目录的,但是目前的模版引擎是直接使用配置的路径,这是不是在开发的时候考虑到其他用途,还是说之前没有注意到这是个问题,就得需要波总来解释了。@JFinal
而 web 项目的场景让其直接就是 webroot 是最佳的,如果你设置成为 webroot + "/themes",那么希望再访问 webroot 之下的模板或者 webroot 之下其它非 "themes" 之下的模板就无法实现
对于你的应用场景,在 configRoute(Routes routes) 中使用 routes.setBaseViewPath("/themes") 才是最好的实践方式,这里的配置指定的路径是相对于 webroot 的,非常易于使用
不仅如此, Routes 还可以针对不同的模块独立配置,具体配置方式详细 jfinal club 项目源代码,极其好用