Jfinal用于页面渲染的Template能放在项目之外吗

Jfinal用于页面渲染的Template能放在项目之外吗,比如一个绝对路径D:/data下

评论区

JFinal

2018-05-04 11:41

必然可以,在 configEngine(Engine me) 中配置一下:
me.setBaseTemplatePath("d:/data");

JFinal

2018-05-04 11:45

如果你有一部分模板是放在项目中,一部分是放在项目之外,还可以自己弄个 BaseController,里面加个 renderExt(String) 方法,然后建一个 ExtRender ,大致如下:

public class ExtRender extends Render {
static final Engine engine = new Engine().setDevMode(true).setBaseTemplatePath("D:/data");

public void render() {
这里面基本照抄 TemlateRender.java 源代码,只是将 engine 改用你上面自己 new 出来的
}
}

最后在 BaseController 中的 renderExt 这样用:
public void renderExt(String view) {
render(new ExtRender(view));
}

JFinal

2018-05-04 11:46

总之,在同一个项目中,可以同时存在多个 Engine 对象,这些不同的 Engine 对象可以分别配置,分别用于不同的用途

在 jfinal 中做扩展极其方便

Dull

2018-05-04 13:17

太感谢了,这个确实可以用,但是实际使用中有一个问题,如下代码
public ExtRender(String view) {
this.view = view;
engine=new Engine()
.setDevMode(PropKit.getBoolean("devMode",false))
.setBaseTemplatePath("/wwwdata/userTemplate")
.addSharedFunction("/_view/common/__layout.html");
}
这是ExtRender的构造方法,/wwwdata/userTemplate是用户上传的模板(因为不想每次部署项目都备份,所以会单独一个项目外文件夹存放,不属于项目开发的一部分),而/_view/common/__layout.html则是项目的框架模板(属于项目开发的一部分),也就是说userTemplate里的模板是基于__layout.html的,所以我期望的是addSharedFunction加载的是webapp下的/_view/common/__layout.html,而不是/wwwdata/userTemplate下的/_view/common/__layout.html,有没有办法解决这个矛盾,没有的话也没关系,我吧__layout.html放在项目外就行了

JFinal

2018-05-04 14:48

不要在 ExrRender 的构造方法中 engine=new Engine(),虽然 Engine 对象是轻量级的,但你这样做还是太浪费了

在 ExtRender 中弄个 static Engien engine 属性,只初始化一次即可

想使用另一个地方的 layout.html 并用 addSharedFunction 方法添加进去可以使用下面的方法:
engine.addSharedFunction(new FileSource(null, "D:/任意路径/layout.html"));

JFinal

2018-05-04 14:48

Engine 中的很多方法都是有重载的,各种参数支持不同的使用场景

热门反馈

扫码入社