在模板中渲染bean错误和异常

时间:2018-02-22 01:45:46

标签: grails

我有控制器检查Command Object是否有效。如果不是,我会渲染错误template

if (!cmdObj.validate()) {
    render (status: 400, template:'error', model: [errorObj: cmdObj])
    return
}

然后在错误template中,我有以下代码来呈现bean的所有错误

<div>
    <g:hasErrors bean="${errorObj}">
        <div class="error-messages">
            <g:renderErrors bean="${errorObj}"/>   
        </div>
    </g:hasErrors>
</div>

这很好用。但是,我想在处理异常时使用相同的错误template。例如,在同一个控制器中,我有一个处理异常的方法:

def handleMyCustomException(MyCustomException e) {
    render (status: 500, template:'error', model: [errorObj:e])
}

这不起作用,因为Exception不是Grails可用于呈现错误的bean。

有没有办法可以将我的错误template重用于无效和异常的bean?

我使用的是Grails 2.4.4

1 个答案:

答案 0 :(得分:0)

以下是我提出的一种简单方法,让模板同时显示Bean个错误和Exceptions

<div>
    <g:if test="${exception}">
        <div class="error-messages">
            ${exception.message}   
        </div>
    </g:if>
    <g:elseif test="${errorObj}">
        <g:hasErrors bean="${errorObj}">
            <div class="error-messages">
                <g:renderErrors bean="${errorObj}"/>   
            </div>
        </g:hasErrors>
    </g:elseif>
</div>

然后在异常处理程序中:

render (status: 500, template:'error', model: [exception:e])