Tx的使用:无论如何返回给客户端或者ajax调用一个json串

hengqihengyi 发布于 2016/06/15 16:07
阅读 343
收藏 0

@JFinal ,您好,请教一个问题:

    Tx的原理是通过捕获异常,在一个Controller方法中使用事物拦截器Tx,如果我的方法中我自己捕获了异常,那么Tx应该就不起作用了,如何做到无论如何返回给客户端或者ajax调用一个json串,但是事物又要起作用?望解答。

加载中
1
JFinal
JFinal

    最好的方式是使用业务层 AOP,在业务层方法上使用 Tx 拦截器,然后在控制层 controller 的 action 中 try catch 一下异常,然后分别 render 不同的数据即可,大至这样:

// 业务层
public class Service {
  @Before(Tx.class)
  void doIt() {
     ...
  }
}
控制层这样:
public void action {
  Service service = Duang.duang(Service.class);
  try {
    service.doIt();
    render(okData);
  } catch(Exception e) {
    render(errorData);
  }
}

   还有其它很多办法,例如使用 Db.tx 而不用拦截器。例如,使用一个全局拦截器统一处理 Tx 异常,并 render 合适的数据出去。还有一种办法是在捕获异常以后,使用 DbKit.getConfig().getConnection().rollback() 手动回滚一下。

0
hengqihengyi
hengqihengyi
嗯,谢谢如此详细的解答。
返回顶部
顶部