Grails Problema com mensagens de erro personalizadas
-
15-09-2020 - |
Pergunta
Atualmente, estou tentando especificar mensagens de erro personalizadas em grails para as restrições padrão, mas tão longe tudo o que recebo de volta é a mensagem de erro padrão.
Eu sei que eu tenho que editar o grails-app/i18n/mensagens.propriedades do arquivo
Se eu alterar os seguintes códigos de erro de mensagem, ela será exibida corretamente a nova mensagem de erro
default.blank.message=Property [{0}] of class [{1}] cannot be blank
No entanto, não é isso que estou tentando fazer.Eu preciso de mais granular de relatório de erro e ter mais de um campo que pode ser em branco, etc.O que eu gostaria de ser capaz de fazer seria, exibir mensagens personalizadas para cada campo em uma classe
package com.mycompany.myapp
class Test{
String name
def constraints = {
name(nullable:false, blank:false)
}
}
(códigos a seguir acrescentado ao final das mensagens.propriedades)
test.name.blank=Name cannot be blank
test.name.nullable=Name cannot be nullable
De acordo com a documentação do grails isso deve funcionar correctamente, com ou sem o nome do pacote - nome da classe.propertyName.em branco
grails.org/doc/latest/ (seção restrições) & (seção 7.4 - validação e internacionalização)
Eu tentei todos os comnbinations que eu posso pensar, mas ele sempre exibe a mensagem personalizada
Eu também tentei instalar o grails i18n modelos plugin
http://www.grails.org/I18n+Templates+Plugin
o que gerou os códigos de erro automaticamente para mim.Eu acrescentados novos códigos de erro para o fim das mensagens existentes.propriedades de arquivo, mas eu ainda obter as mensagens de erro padrão.
No entanto, havia algo diferente com os códigos de erro gerados pelo plugin.
em vez do formato especificado no grails, doc - teste.o nome.null=......, é gerado automaticamente teste.o nome.nulo.erro=Mensagem Personalizada
Eu também tentei apagar as mensagens de erro padrão completamente, mas eles ainda são exibidos
Se alguém já teve este problema antes, eu agradeceria qualquer ajuda que alguém pode me dar
Obrigado antecipadamente
Solução
colocar def messageSource (no controlador ou serviço)
item.errors?.allErrors?.each{
println messageSource.getMessage(it, null)
};
Eu também achei um bom link que explica isso melhor
http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html
Outras dicas
Bem, a documentação mostra um exemplo de como substituir as mensagens de um padrão de Validação de Restrições (em branco, nulo, min, max, tamanho, escala, etc.).Mas não consegue dizer-lhe para olhar na documentação para cada Restrição e na parte inferior mostra o que propery chave para usar:
Código De Erro: o nome da classe.propertyName.tamanho.toosmall ou o nome da classe.propertyName.tamanho.toobig
para a Restrição de tamanho http://grails.org/doc/latest/ref/Constraints/size.html
Assim, para
package com.example
class User {
String username
static constraints = {
username size:5..15
}
}
utilização:
com.exemplo.Usuário.nome de usuário.tamanho.toosmall=Yo lá!muito pequeno:[{0}] da classe [{1}] com o valor [{2}] não se enquadra dentro válido tamanho do intervalo de [{3}] a [{4}]
com.exemplo.Usuário.nome de usuário.tamanho.toobig=Yo lá!muito grande:[{0}] da classe [{1}] com o valor [{2}] não se enquadra dentro válido tamanho do intervalo de [{3}] a [{4}]
Pode ser que as restrições não são estáticos - deve ser especificado como "static constraints = { ..."
Observe também que anulável padrão para false, então você não precisa especificar isso.
Eu uso totalmente qualificado nomes de classe em minhas mensagens.propriedades
com.shareyourlove.User.password.blank=Some custom message
Isso funcionou para mim
com.model.Customer.name.nullable.error = Custom message
em vez de
com.model.Customer.name.blank = Custom message