2010-07-16 19 views
14

Est-ce que quelqu'un sait comment je pourrais obtenir le fieldError à imprimer dans l'exemple ci-dessous.Affichage des erreurs de champ Grails

pour chaque élément avec une erreur, je voudrais imprimer des messages d'erreur personnalisés que je définis dans le fichier messages.properties

au moment tout cela ne fait imprimer les codes d'erreur par défaut

item.errors?.allErrors?.each{ 
    println it.toString() 
} 

J'ai vu d'autres exemples où vous pouvez rechercher un code d'erreur pour un champ par exemple

it.getFieldError('title').code 

mais je voudrais convertir le message par défaut dans mon nouveau message d'erreur et l'imprimer.

Répondre

20

Vous devez accéder au bean messageSource, par ex. avec

def messageSource 

dans votre contrôleur ou service. Ensuite, vous pouvez accéder aux messages avec

def locale = Locale.getDefault() 
for (fieldErrors in bean.errors) { 
    for (error in fieldErrors.allErrors) { 
     String message = messageSource.getMessage(error, locale) 
    } 
} 
+1

mis def MessageSource (dans le contrôleur ou service) Merci cela a fonctionné. item.errors? .allErrors? .each { println messageSource.getMessage (it, null) }; J'ai aussi trouvé un bon lien qui explique cette meilleure http://johnrellis.blogspot.com/2010/02/retrieve-grails-domain-errors-from.html – MTH

+1

Burt, il ne semble pas comme ça devenir plus simple depuis 2010. Y a-t-il une raison pour laquelle les objets d'erreur individuels n'ont pas de champ 'message' qui renvoie le message spécifique plutôt que d'avoir à importer un bean et à appeler une méthode statique? –