Printemps: Comment résoudre une erreur de validation -> code d'erreur -> message d'erreur
Au Printemps, après validation, nous obtenons un BindingResult
objet dans le controller
.
Assez Simple, si j'obtiens des erreurs de validation, je veux ré-afficher mon formulaire avec le message d'erreur ci-dessus chaque champ désolé.
Pour vérifier le champ des erreurs sur le terrain username
de mon FormObject
j'appelle:
FieldError usernameFieldError = bindingResult.getFieldError("username");
Génial, maintenant j'ai un FieldError
objet qui, en supposant que je suis en utilisant le DefaultMessageCodeResolver
contient maintenant quelque chose comme 4 codes d'erreur possibles.
Comment puis-je passer de FieldError
-> Une chaîne de caractères qui est consommable pour l'utilisateur?
J'ai un MessageSource
définie dans mon webapplication contexte, donc je peux mapper un code d'erreur à un message.
Mais parfois, le message par défaut sera le meilleur, et parfois je m'attends que les deux codes d'erreur pourrait avoir un message pertinent, nous avons donc besoin de choisir le meilleur.
Quelle méthode dois-je utiliser pour déterminer le meilleur message d'erreur possible de présenter pour un champ d'erreur?
- Dois-je écrire un algorithme pour aller à travers tous les codes d'erreur et de sélection de la plus spécifique?
- N'printemps fournir un soutien pour les aider à déterminer le plus de message d'erreur spécifique?
- L'ensemble de ce processus semble si long et alambiqué, je pensais que le printemps était censé faire ce genre de choses faciles. Peut-être que je suis totalement hors de la base en quelque sorte?
OriginalL'auteur David Parks | 2010-11-17
Vous devez vous connecter pour publier un commentaire.
Vous êtes, comme vous l'avez deviné, le rendant beaucoup plus difficile sur vous-même qu'il doit être. Le
FieldError
objet est lui-même unMessageSourceResolvable
. Vous n'avez pas besoin d'obtenir les codes de il a ensuite pris les codes manuellement à votre message source et aller à la recherche. Vous pouvez simplement passer à votreMessageSource
et il va trouver le plus spécifique qui a une traduction définis dans les paramètres régionaux. (en supposant que votre code de résolution de les mettre dans le bon ordre.)Vous n'avez même pas besoin de le faire dans la plupart des cas, cependant. Mettre le
Errors
sur votre support de l'objet et de les traduire vous-même n'est généralement pas nécessaire. Leform
espace de noms dans la jsp bibliothèque fournit une balise qui regarde les messages d'erreur pour vous. Tout ce que vous devez faire est de mettre laErrors
dans leModelMap
. Voir les docs:http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/view.html#view-jsp-formtaglib-errorstag
Point intéressant au sujet de la bibliothèque de tags JSP, je suis en utilisant la Vélocité, mais le Printemps offre le même en macro forme. Mais je n'ai pas employé encore que, il semblait plutôt anti-printemps de la cravate, même de mon point de vue de la présentation du framework spring. J'ai pensé qu'il assez mauvais que mon contrôleur appelle maintenant le printemps spécifiques MessageSource plutôt que java standard ResourceBundle. Mais je vais peut-être avoir à y penser? C'est ma première fois avec le Printemps.
Assez vrai, mais aussi loin que la vue des technologies aller, vous êtes généralement à l'extrémité couplée à la quelque chose. Vous allez faire beaucoup de réinventer la roue si vous essayez d'utiliser seulement JSTL et de la servlet API! WebMVC et WebFlow sont assez non intrusive, et avec les bibliothèques de balises, vous peut facilement créer votre propre .les fichiers de balises que de les emballer et de les "isoler" la dépendance à un seul lieu, que la mise en œuvre pourrait être changé plus tard. À l'aide de la balise permettrait également de supprimer la dépendance sur les Erreurs de l'interface dans la sauvegarde de votre objet, vous permettant d'utiliser un printemps sans pojo.
OriginalL'auteur Affe