3

我有许多方法的控制器,并使用命令对象来验证参数。但是对于每种方法,我必须调用 hasError() 并且如果它真的处理错误(通常意味着重定向到特殊页面)。

class MyController{

    def action1(ActionCommandObject cmd){
        if(cmd.hasErrors()){
            //redirect to special page or throw an Exception
        }

        // do smth.

        render view:'/myview1', model: []
    }

    def action2(ActionCommandObject cmd){
        if(cmd.hasErrors()){
            //redirect to special page or throw an Exception
        }

        // do smth.

        render view:'/myview2', model: []
    }

    // More similar methods

}

是否可以避免每种方法中的过程错误情况?我的意思是如果验证失败然后立即执行一些代码(例如抛出异常或重定向到错误页面)

我试图让命令对象在验证后做一些事情,但我不能因为缺少 afterValidate 方法(beforeValidate 方法存在)

4

1 回答 1

3

您可以执行此处描述的操作:

class MyController{

    protected Object withCommandChecking( cmd, Closure closure ) {
        if(cmd.hasErrors()){
            //redirect to special page or throw an Exception
        }
        return closure.call()
    }

    def action1(ActionCommandObject cmd){
        withCommandChecking( cmd ) {
            // do smth.
            render view:'/myview1', model: []
        }
    }

    def action2(ActionCommandObject cmd){
        withCommandChecking( cmd ) {
            // do smth.
            render view:'/myview2', model: []
        }
    }
}
于 2013-09-11T12:40:08.783 回答