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

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top