首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
Jfinal用于页面渲染的Template能放在项目之外吗
Dull
2018-05-04 11:39
Jfinal用于页面渲染的Template能放在项目之外吗,比如一个绝对路径D:/data下
项目:
JFinal
2
评论区
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 中的很多方法都是有重载的,各种参数支持不同的使用场景
回复
发送
我要反馈
热门反馈
扫码入社
me.setBaseTemplatePath("d:/data");