我对Grails很新,我确信已多次询问过这个问题。我有一个我用grails开发的应用程序。在我的服务中,我进入多个表。如果其中一个失败并出现mysql唯一约束异常,则会在domainInstance.errors对象中收到错误。如何解析此问题以将适当的错误代码返回给我的控制器。
通常在春天,我通常会为控制器添加一个异常拦截器来处理这个问题。什么是用grails做的首选方式。
答案 0 :(得分:1)
当验证的域对象有验证错误时,它们存储在domainObject.errors
下,作为Spring Errors接口的实现。要在GSP中呈现此对象的字段的错误,通常使用以下内容:
<g:hasErrors bean="${book}" field="title">
<div class="errors">
<g:renderErrors bean="${book}" field="title" as="list" />
</div>
</g:hasErrors>
显示的确切消息是从message*.properties
文件中解析的。如果您想在控制器中获取这些消息,请执行以下操作:
class MyController {
MessageSource messageSource
LocaleResolver localeResolver
def myAction(Book book) {
Locale locale = localeResolver.resolveLocale(request)
if (!book.validate()) {
List allErrorMessages = book.errors.allErrors.collect {
messageSource.getMessage(it, locale)
}
// print all error messages
println allErrorMessages
}
}
}