JFinal 异常处理 热? 400 报错-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

JFinal 异常处理 热? 400 报错

优选2 2020-06-09 11:18:21 43

JFinal 异常处理 热? 400 报错

@JFinal 你好,想跟你请教1个问题:

能给一个exception处理机制吗?

目前发现 Validator 里面有一点机制, 但是仅仅限于Validate。

异常通常是就直接: 500 Internal Server Error 页面了

期望的效果是: 哪个页面出错, 就停在哪里页面, 但是提示出错误信息。 并且有时候, 根据业务需要, 会主动抛出业务异常, 这些都需要在页面上显示。 


分享到
取消 提交回答
全部回答(1)
  • 优选2
    2020-06-09 11:18:36

    非常有价值的问题   

    1:如果你的action使用了Validator,并且在validate方法中有异常是不会跳转到error500页面的。跳到error500的情况是异常在action或interceptor中发生了。

    2:使用Validator时,如果需要在哪个页面出错,仍回到哪个页面的功能早已存在了,只不过需遵守约定,即:view=methodName+view扩展名。

    3:页面跳转方面除了上面的约定以外JFinal还可以让开发者在handlerError指定跳转的去处,这样灵活性更高。

    4:原表单的信息保持功能也有,如此办理:controller.keepPara();

      总的来说,JFinal的Validator已经实现了此贴中需要的所有功能,只不过使用的时候需要来点约定,如果没有约定,就需要手动去调用一下方法,也就一行代码的事。虽然代码增加了一两行,但适应性与灵活性都大大加强了。如果JFinal的Validator仍然不能满足需求的话,自定义一个自全局拦截器实现整个系统的异常管理也非常的方便。

       再次感谢提出这么深入的问题,此问题深入到了JFinal的设计层面,是作者在设计时无时不刻都在权衡的问题:)

    ###### @JFinal  ######一般异常都希望跳到一张其它页面去避免重复发生异常,所以只要把500页面的内容换一下就可以了!而且异常的对象是可以在500页面取到的!######一路向外抛配置一个拦截器统一抓异常显示到一张异常处理的页面上.可以参考OSC的异常处理页面将异常信息发送邮件通知
    ######

    500这种程序异常不应该在客户端显示吧,数据的错误交给validator处理正合适。

    而且JFinal支持自定义500页面,可以提供人性化的展示,这也是很多网站的做法。

    至于业务异常可以在controller里面自己捕获然后setAttr,在页面自己处理显示。

    个人感觉JFinal对于框架应该做的事,基本都处理到位了。

    个人观点,仅供参考~~

    ######

    引用来自“农夫三拳”的答案

    一般异常都希望跳到一张其它页面去避免重复发生异常,所以只要把500页面的内容换一下就可以了!而且异常的对象是可以在500页面取到的!

    不太合理.....

    写了一个篇博客、表单,提交时失败了(无论任何原因),跳转到其他页面。就白打字了,保存、修改的机会都没有了。

    ######回复 @一千年前的人:不太明白主动抛出异常是啥状况呢?个人认为只要是数据上的问题,validator应该都包办了,比如范围,长度,类型等等。######回复 @alvinte:不够的。。我会主动抛出异常的。。######这种场景不是validator就足够处理了么?######

    引用来自“alvinte”的答案

    500这种程序异常不应该在客户端显示吧,数据的错误交给validator处理正合适。

    而且JFinal支持自定义500页面,可以提供人性化的展示,这也是很多网站的做法。

    至于业务异常可以在controller里面自己捕获然后setAttr,在页面自己处理显示。

    个人感觉JFinal对于框架应该做的事,基本都处理到位了。

    个人观点,仅供参考~~

    是的。所以JFinal需要设计一个异常机制。

    因为这个部分完全自己处理的话,会有很多关于异常处理的重复代码。

    能统一处理的,尽量统一处理。

    ######

    看了楼主的需求,觉得用Validator还是最合适的

    ###### protectedvoidhandleError(Controllercontroller){controller.keepModel(Blog.class);StringactionKey=getActionKey();if(actionKey.equals("/blog/save"))controller.render("add.html");elseif(actionKey.equals("/blog/update"))controller.render("edit.html");}

    Validator 这部分代码也是冗余的,那个页面出错,就停在哪个页面。

    ######可以用JFinal的约定,就不会有代码冗余。即方法名和模板文件名一致。######

    引用来自“galaxy58”的答案

    看了楼主的需求,觉得用Validator还是最合适的

    你尝试下,savedb时,字段长度溢出,就会跑到500页面了。或者我主动抛出一个异常...
    0 0
云计算
使用钉钉扫一扫加入圈子
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章