关于模版引擎的BaseTemplatePath

在使用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


评论区

JFinal

2017-04-13 18:44

configEngine(Engine engine) 这个方法内不建议配置 engine.setBaseTemplatePath(...),因为这个配置是留给独立使用 template engine 的场景用的

而 web 项目的场景让其直接就是 webroot 是最佳的,如果你设置成为 webroot + "/themes",那么希望再访问 webroot 之下的模板或者 webroot 之下其它非 "themes" 之下的模板就无法实现

对于你的应用场景,在 configRoute(Routes routes) 中使用 routes.setBaseViewPath("/themes") 才是最好的实践方式,这里的配置指定的路径是相对于 webroot 的,非常易于使用

不仅如此, Routes 还可以针对不同的模块独立配置,具体配置方式详细 jfinal club 项目源代码,极其好用

whoismy8023

2017-04-14 08:51

@JFinal 好的,谢谢解释

westgo

2017-04-22 16:56

热门分享

扫码入社