2017-05-18 12:47
@JFinal 解决方式
WebAppContext context = new WebAppContext("/","/");
........
context.setResourceBase("/WEB-INF");
........
随便设置一个路径就可以了,不存在也没关系
最好还是改下jFinal源码,不在启动时做异常检查,因为有些时候不需要模板引擎的,不设置路径就导致启动不了
设置jfinal的PathKit.setWebRootPath不行,主要是jFinal.initPathUtil会重新设置PathKit.setWebRootPath,所以后面执行的engine.setBaseTemplatePath就会有问题
2017-05-09 12:56
我是这样处理的,将需要刷新的div创建一个Directive,在相应模板中引入,需要刷新时,调用ajax,执行后端指令渲染,代码如下:
Engine engine = RenderManager.me().getEngine();
String[] params = getParaValues("params");// 指令参数
String name = getPara("name");// 指令名称
if(engine.getDevMode()){
log.info("页面请求指令:"+name+",参数:"+StringUtils.join(params));
}
try{
renderHtml(engine.getTemplateByString("#"+name+"("+StringUtils.join(params, ",")+")").renderToString(new HashMap()));
}catch(Exception e) {
log.warn("请求指令异常", e);
renderNull();
}
这块代码可以执行任意的指令标签局部刷新,用起来我觉得比你上面类beetl的处理方式灵活点
还有点需要注意就是上面的params参数,这个参数需要在对应指令里设值,设值的简化代码如下:
data.put("dataJson", JsonKit.toJson(exprList.evalExprList(scope)[0]));
就是将标签的参数传到页面上,便于ajax刷新标签时带参数
2017-04-08 09:54
可能描述的不清晰,上面的模板C是自定义指令里使用的模板文件,在模板B中使用该指令时,无法调用指令中的js()模板函数,因为指令js仅仅在直接引用模板A的模板下是可以被调用的
不能截图,大致写下三个文件的代码
---------------------------------------------------------------------------------------
A模板文件:
#define layout()
........
#@main()
.......
#@js?()
#end
---------------------------------------------------------------------------------------
B模板文件:
#include("A.html")
#@layout()
.....
#define main()
......