提个 JFinal template engine引擎一个模板级别局部异步刷新实用功能

这个功能是这样的,比如说数据修改,我只想刷新某一个div层不需求刷新整个页面,也就是我们常说的异步局部刷新功能,感觉这个挺好使的,所以就提出来,望波总多方权衡下。

评论区

JFinal

2017-02-12 17:40

这个不是纯前端去实现的功能吗? 例如用 ajax 去实现

EATI001

2017-02-12 17:46

@JFinal 有时候模板支持也是个不错的选择的。

EATI001

2017-02-12 17:47

JFinal

2017-02-12 17:49

@EATI001 主要是不知道怎么去支持这个功能,因为模板渲染出 html 数据给浏览器以后,控制权已然在了浏览器,此时后端怎么去控制前端来部分刷新操作?

难道要同时渲染出 js 代码,用 js 代码再请求后端去局部刷新?

EATI001

2017-02-12 17:55

@JFinal 前端有个标记指定区域为渲染做准备,前端js发起请求,后端接收到这个标记指令后响应只渲染被标记为指定区域的部分被渲染刷新改变数据。

EATI001

2017-02-12 17:57

@JFinal 这样就达到根据指定的指令执行页面渲染新效果了。

JFinal

2017-02-12 18:03

仍然是 js,jfinal template 暂时没有精力去做前端的东西,后续再考虑这类扩展,先让开发者自己去多玩玩

EATI001

2017-02-12 18:04

@JFinal 如:
#ajax userTable: {





#for(user :users){ %> #end
id姓名
#(user.id)#(user.name)

#end

render("index.html#userTable")

#ajax 用于告诉告诉模板引擎,此处是个局部渲染标记,标记为"userTable",对于正常渲染视图"index.html"页面,#ajax标记没什么用处,table仍能得到正常渲染。如果渲染的视图是index.html#userTable,则模板只会渲染#ajax标记得模板片段,其他部分将忽略。

EATI001

2017-02-12 18:07

@JFinal jfinal template的确挺好用的,速度

JFinal

2017-02-12 18:07

@EATI001 这种玩法,使用 jfinal template engine 提供的“指令级扩展”非常方便去实现

EATI001

2017-02-12 18:20

哦,谢谢波总提醒

EATI001

2017-02-12 18:26

@JFinal 对了,波总还想问个问题,就是我想设置模板目录为WEB-INF/view这个怎么处理呢?还是不用设置直接使用就好了?

JFinal

2017-02-12 18:29

public void configRoute(Routes me) {
me.setBaseViewPath("view");
}

即可打完收枪,具体可以参考一俱乐部提供的专享项目:jfinal-club

EATI001

2017-02-12 18:32

zzhkiller

2017-03-20 09:28

溜溜 对了 波总 俱乐部 有微信群吗 ?

JFinal

2017-03-20 11:30

@zzhkiller 俱乐部暂且只有 qq 群

zzhkiller

2017-03-20 14:35

@JFinal QQ基本不玩 先不加了

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刷新标签时带参数

JFinal

2017-05-09 13:15

@召 用得蛮灵活的,赞一个

woshify

2017-07-18 14:47

@EATI001 你这种玩法,让我想起了公司很老的asp.net项目, 看似很好. 真正用起来, 坑

woshify

2017-07-18 14:49

@EATI001 微软这么强大的团队, 把控件做得如此之炫, 然而到头却为之诟病, 现在都是mvc6了

原味

2017-10-14 16:41

那ajax如何刷新div中
<%@include file="**.jsp"%>
页面?

热门反馈

扫码入社