在 grails 中验证后处理所有控制器方法中的错误的最佳方法

Posted

技术标签:

【中文标题】在 grails 中验证后处理所有控制器方法中的错误的最佳方法【英文标题】:Best way to process errors in all controller methods after validation in grails 【发布时间】:2013-09-15 11:27:21 【问题描述】:

我有许多方法的控制器,并使用命令对象来验证参数。但是对于每种方法,我必须调用 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 方法存在)

【问题讨论】:

【参考方案1】:

你可以做类似described here:

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: []
        
    

【讨论】:

感谢您的回答,但仍然需要在每个操作方法中调用错误处理方法。我的主要想法是动作方法不应该知道任何关于错误过程的信息,如果它已被调用,那么一切正常且参数有效,但如果参数无效动作方法尚未被调用(即没有要处理的代码) @AndrejSoroj this might be an alternative(使用过滤器) 浏览这篇文章。 ***.com/questions/10327091/…

以上是关于在 grails 中验证后处理所有控制器方法中的错误的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

从 Grails 中的过滤器定义控制器可访问变量

Grails 控制器中的异常处理

Grails 中的控制器

在 grails 中,我如何获得对所有当前会话的引用?

在过滤器中访问 request.JSON 后 Grails 2.5.0 控制器命令对象绑定

如何在 Grails 中实现超时页面