2017-05-23 09:47
@JFinal 这个我看到了,疑惑就是这个globalActionInters 的内容何时有的,我并没有看到任何地方为这个数组赋值,NULL_INTERS只是定义了一个0长度的拦截器数组。
2017-05-22 21:18
@JFinal 最近看了一点jfinal的源码,有一个疑惑,在buildActionMapping中把Controller和Action级别的拦截器都进行了初始化等处理工作,但是全局拦截器确没看到初始化等工作,唯一的一个地方还注释了就是在new 一个ActionMapping的时候注释了全局拦截器的获取,那这个全局拦截器到时候在什么时候拿到并创建了?
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强大(^-^)。感谢作者。