2017-05-22 21:18

@JFinal 最近看了一点jfinal的源码,有一个疑惑,在buildActionMapping中把Controller和Action级别的拦截器都进行了初始化等处理工作,但是全局拦截器确没看到初始化等工作,唯一的一个地方还注释了就是在new 一个ActionMapping的时候注释了全局拦截器的获取,那这个全局拦截器到时候在什么时候拿到并创建了?

2017-05-18 16:21

我这边是通过http代理上网的,反馈里的编辑器提交不了内容,提示http返回403,代理问题,但是这里的评论又可以。

2017-05-18 16:20

@JFinal
现在手上维护的一个项目是好几年前的使用spring框架写的,是一个纯粹的rest接口项目,现在添加一些新的接口,用惯了jfinal的renderJson,就像把这部分功能移植过来用。于是查看源码。
1、renderJson(Ret.fail("msg", "回复内容不能为空"));
进入renderJson方法里,如下代码:
public void renderJson(Object object) {
render = object instanceof JsonRender ? (JsonRender)object : renderManager.getRenderFactory().getJsonRender(object);
}
大概意思是:如果传入的object本身就是一个JsonRender对象则直接转换后返回,否则new一个回来,那么问题来了,直接返回一个JsonRender,并未做任何实际性的动作行为,为何json值就通过response写到前端页面呢。
我跟踪了一下
renderManager.getRenderFactory().getJsonRender(object)这个代码,最后也只是到这里
public JsonRender(Object object) {
this.jsonText = JsonKit.toJson(object);
}
其实真正写回页面是这个方法
public void render() {
if (jsonText == null) {
buildJsonText();
}

PrintWriter writer = null;
try {
response.setHeader("Pragma", "no-cache"); // HTTP/1.0 caches might not implement Cache-Control and might only implement Pragma: no-cache
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);

response.setContentType(forIE ? contentTypeForIE : contentType);
writer = response.getWriter();
writer.write(jsonText);
writer.flush();
} catch (IOException e) {
throw new RenderException(e);
}
finally {
if (writer != null) {
writer.close();
}
}
}
但是没有看到调用的地方?

本来是写在反馈里的。不知道为什么报错了,无法提交。

2017-04-27 14:29

@JFinal 当时隐约的记得是多出了空格,刚刚正是测试了一次,是自己搞错了,#else abc#end,应该是这样,用一个空格分隔,jf templete强大(^-^)。感谢作者。

2017-04-27 11:48

@JFinal如果使用空格分隔后,出现的实质性的内容中也会有空格,这个算是正常的么?

2017-04-25 10:00

@JFinal 再次感谢波总,你的回答总是那么深入。

2017-04-21 09:09

oschina搜索 kisso,这个瑞士军刀 有整合jfinal的例子。注kisso是一个即插即用的单点登录框架

2017-04-10 15:33

感谢波总!