Exibindo Grails Campo De Erros
-
16-09-2020 - |
Pergunta
Alguém sabe como eu poderia ficar o fieldError
para imprimir no exemplo abaixo.
para cada item, com um erro, eu gostaria de imprimir mensagens de erro personalizadas que eu tenho definido nas mensagens.propriedades do arquivo
no momento em que tudo isso é imprimir o padrão de códigos de erro
item.errors?.allErrors?.each{
println it.toString()
}
Eu tenho visto outros exemplos de onde você pode pesquisar um código de erro para um campo e.g.
it.getFieldError('title').code
mas eu gostaria de converter a mensagem padrão em minha nova mensagem de erro e a impressão.
Solução
Você precisa de acesso para o messageSource de feijão, por exemplo,com
def messageSource
em seu controlador, ou de serviço.Em seguida, você pode acessar as mensagens com
def locale = Locale.getDefault()
for (fieldErrors in bean.errors) {
for (error in fieldErrors.allErrors) {
String message = messageSource.getMessage(error, locale)
}
}
Outras dicas
Um pouco mais simples solução com melhor desempenho seria;
MessageSource messageSource //Inject the messageSource class
e.errors.allErrors.each {
String message = messageSource.getMessage(it, Locale.default)
}
OU
Se você quer lidar apenas com o campo de erros:
e.errors.fieldErrors.each {
String message = messageSource.getMessage("modified.invalid.validator.message", [it.field, 'message'] as Object[], Locale.default))
}
Onde modified.invalid.validator.message
é o local de seqüência de caracteres em seu messages.properties
.Neste exemplo em particular, esta mensagem diz algo como...
modified.invalid.validator.message=Property [{0}] of [{1}] does not pass validation