浏览 1371 次
锁定老帖子 主题:利用etmvc的环绕过滤器控制事务边界
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-30
最后修改:2009-06-19
环绕过滤器能够在Action执行之前和之后执行一段代码,相比前置过滤器和后置过滤器而言更加强大。可以为Action设置多个环绕过滤器,通过在控制器上进行注解: @AroundFilters({ @AroundFilter(execute=A.class), @AroundFilter(execute=B.class) }) public class ApplicationController extends Controller{ 环绕过滤器可以接受only和except参数以控制在那些Action上执行。 注意前置和后置过滤器的execute是执行的方法名称,而环绕过滤器的execute是一个类,这个类必须实现AroundHandler接口,或者继承AbstractAroundHandler类。 多个环绕过滤器的执行是嵌套的,如上例的执行顺序如下: A.before B.before Action B.after A.after
环绕过滤器可以处理身份验证,错误处理,日志处理,事务控制等,比如在Action中操作数据库的代码,如果需要事务控制,可以写上 try{ beginTransaction(); ... commit(); } catch(Exception ex){ rollback(); } 之类的代码,但利用环绕过滤器可以有更优雅的做法,这时Action代码保持不变,注解加上事务过滤器就好,过滤器代码如下所示: public class TranFilter extends AbstractAroundHandler{ @Override public boolean before(Controller controller) throws Exception{ ActiveRecordBase.beginTransaction(); return true; } @Override public boolean after(Controller controller) throws Exception{ if (controller.getException() == null){ ActiveRecordBase.commit(); } else{ ActiveRecordBase.rollback(); } return true; } } before方法保证执行在Action 之前,after则执行在Action之后,且只要before执行成功,保存一定会执行after。这样,在需要事务控制的控制器上,只要加上 @AroundFilter(execute=TranFilter.class, only={"update","create"}) 这样的代码就行了。
关于etmvc的详细资料,请访问www.etmvc.cn
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |