Учебник ошибок проверки Grails
Ошибки для объекта домена хранятся в свойстве errors
, которое добавляется к объекту после его проверки.Это свойство является реализацией интерфейса Spring Errors .
Вы можете получить ошибки, вызвав методы этого интерфейса напрямую, например, чтобы отобразить ошибки для поля move
поляCarro
экземпляр:
List<FieldError> moveErrors = carroMovelInstance.errors?.getFieldErrors('move')
Чтобы получить сообщения об ошибках для каждой ошибки, вам потребуется ссылка на компонент messageSource
, созданный Grails.Вы можете получить сообщение для каждой из вышеуказанных ошибок с помощью:
List<String> errorMessages = moveErrors.collect {error ->
messageSource.getMessage(error, Locale.default)
}
В качестве альтернативы Grails предоставляет теги eachError
и renderErrors
, которые упрощают отображение ошибок и соответствующих сообщений в GSP.
Конкретные проблемы с вашим кодом
В коде вашего контроллера будет возникать исключительная ситуация при сбое save
из-за ошибок проверки, поэтому представление не может отображать ошибки.Чтобы исправить это, измените контроллер так, чтобы он возвращал доменные объекты (вместе с их ошибками), когда сохранение не удается
def save3 = {
def carroInstance = new Carro( )
def carroMovelInstance = new CarroMovel( )
carroInstance.name = params.carro.name
carroInstance.marca = params.carro.marca
carroInstance.matricula = params.carro.matricula
carroMovelInstance.move = params.carroMovel.move
carroMovelInstance.rodas = params.carroMovel.rodas
carroMovelInstance.espelhos = params.carroMovel.espelhos
// I'm assuming in the code below that the view that displays the form is 'create.gsp'
if (!carroInstance.save()) {
render view: 'create', model : [carro: carroInstance, carroMovel: carroMovelInstance]
return
}
carroMovelInstance.carro = carroInstance
if (!carroMovelInstance.save()) {
render view: 'create', model : [carro: carroInstance, carroMovel: carroMovelInstance]
}
}
Необходимо также изменить GSP, чтобы отображать эти ошибки с помощью API Errors
непосредственно или один из тегов Grails (см. выше)