jfinal可以在系统运行时,改变BaseViewPath的值,以此改变所有文件的访问路径吗?

项目WEB-INF中有view1和view2,这两个view中目录结构完全一致,有没有什么办法可以在不重启项目的情况下,更改BaseViewPath的值,从而相当于换一套访问路径。两个view中主要差别为页面样式,相当于换一套主题皮肤。请问这个可以实现吗?

评论区

JFinal

2018-04-25 13:46

baseViewPath 是固定不变的,可以用一个拦截器实现,大致如下:
public void intercept(Invocation inv) {
inv.invoke();

Render r = inv.getController().getRender();
if (r instanceof TemplateRender) {
TemplateRender render = (TemplateRender)r;
render.setView(在这里改变 view1 为 view2);
}
}

团子sy

2018-04-26 11:01

@JFinal 尝试过这个方法了,但是不行,inv.getController().getRender();获取到的值一直为null,请问这是为什么呀?

JFinal

2018-04-26 11:52

@团子sy getRender 为 null ,注意两点:
1: action 中必须调用过 render 系列的方法,否则不可能有 render 被创建
2: 上述拦截器中 getRender() 的调用必须在 inv.invoke() 后方,就像我上面给出的示例一样,inv.invoke() 处于前方

热门反馈

扫码入社