Grails - 如何获得单个错误消息

时间:2010-07-16 18:55:54

标签: grails

如何从grails中的命令对象获取单个错误消息?

我看到的所有示例都使用类似于commandObject.errors.allErrors()的内容,但如果我只希望将单个错误消息读入控制器并随后传递给视图,则不执行任何操作。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

没有heler可以作为单个错误消息获取。这是我使用的:

对于JSON:

def errors = user.errors.allErrors.collect{
    ['message': messageSource.getMessage(it, null) , 
     'field': it.getField(), 
     'badValue': it.getRejectedValue()
    ]
}

render(status:400, contentType: "application/json"){
    [message:'Failed to save', 'errors': errors]
}

对于HTML(对于大多数用户来说不是理想的错误消息是针对techincal):

flash.message = user.errors.allErrors.collect{
    "Field:${it.getField()}| Error: ${messageSource.getMessage(it, null)}, value:${it.getRejectedValue()}"
}.join('\n')

答案 1 :(得分:0)

我不确定你想要检索什么“单个”错误(对于单个字段?),但只是想指出commandObject.errors的类型为org.springframework.validation.Errors,所以请看一下此接口中声明的方法。有方法可以获得现场错误,全局错误等。如果您能澄清您的问题,我们可以提供更详细的答案..

答案 2 :(得分:0)

您希望将单个错误消息作为响应发送 看一下spring Errors interface here

将所有错误转换为单个错误消息,请检查@Nix answer

对于特定字段,您可以使用以下

Example: Consider field `status` having with invalid value. 

if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status",
        [message(code: 'instance.label', default: 'Test Domain')] as Object[],
        "Custom error message")
    render(view: "edit", model: [instance: instance])
    return
}

OR

// Will render error message corressponding to message code passed
if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status")
    render(view: "edit", model: [instance: instance])
    return
}

OR

// Will render error message corressponding to message code passed
// and if not present will render default custom message passed.
if (instance.errors.hasFieldErrors('status')) {
    instance.errors.rejectValue("status", "error.code.for.status",
        "Custom error message")
    render(view: "edit", model: [instance: instance])
    return
}