JFinal关于render后返回

jfinal2.2

render之后直接返回是必须要显式return,比如检查请求参数合法性,如果不合法,randerJson(result)同时返回。

renderJson(Result.error("缺少参数"));
return;

有没有类似play中,render之后就返回了,不需要显式return。

protected static void renderJSON(String jsonString) {
    throw new RenderJson(jsonString);
}

调用renderJSON(result)就直接返回了

评论区

JFinal

2016-11-08 13:22

play 的这个功能是正要极力批评的一个设计,因为 play 是通过在 render(...) 方法中使用抛出异常这种暴力的方式终止当前执行流程的,起码有两大坏处:
1:抛出异常严重拉低框架性能,异常的创建、初始化、抛出都是很费时的操作
2:异常用于正常流程是对异常的极度误用,建议看看《effective java》 这本经典的书,里面有非常深度的解读,异常只能用于不正常的流程

程序语言决定了,要终止一个正常执行中的 statement 语句序列,必须使用 return、continue、break、goto 等专用程序跳转控制机制才可以做到, throw 并非用于控制程序跳转机制

综上,jfinal 的 render 不会去支持直接跳出当前正常的 statement 执行流

charlox

2016-11-08 14:36

@JFinal 感谢波总解答,推荐的经典书目需要多学习

山东小木

2016-11-08 15:03

play是一个很糙的框架

JFinal

2016-11-08 16:45

@charlox play 的源代码看过一些,基本没法看,看到将异常用于正常流程控制后,更加肯定该框架设计水平较低,此外用 play 开发项目光是 jar 包就一大堆,我记得还用了 JPA、Hibernate 之类的东东,更加没法看了

charlox

2016-11-09 11:01

@JFinal @小木学堂 感谢解答分享,只是之前用到过play,就拿出来提一下,确实jar很多,持久层是JPA,Hibernate,源代码也看了一下,规范性确实不怎么好,代码有点乱,优雅可能更没有了。

王大为

2017-11-28 14:15

@JFinal 请问波总 : 异常: java.lang.IllegalStateException: Cannot create a session after the response has been committed 是否是 renderManager.getRenderFactory().getRedirectRender(url).setContext(request, response).render() 造成的?

热门反馈

扫码入社