Spring MVC formulaire Date de validation de champ
J'ai un champ de formulaire qui doit être converti en un objet Date, comme suit:
<form:input path="date" />
Et j'ai l'obligation de faire de validation de la manière suivante:
- Si l'utilisateur quitte le champ es vide. J'ai besoin de régler certaines de date par défaut.
- Si l'Utilisateur enetered inacceptables format, j'ai besoin de présenter une erreur.
Le problème c'est que je peux répondre à la 1ère ou la 2ème exigence.
- Je peux enregistrer PropertyEditor et dans le cas où la date est inacceptable set null, et au cas où ce champ null définir certains de date par défaut. Mais avec cette approche, je ne peux pas répondre à la 2ème condition, car si je la convertir null je n'aurai pas de possibilité de vous inscrire à la 2ème erreur à l'utilisateur.
- Je peux mettre @DateTimeFormat(pattern="jj-MMM-aaaa") d'annotation et de fournir des typeMismatch d'erreur, mais il renvoie toujours cette erreur quand un utilisateur quitte la valeur vide dans ce domaine.
Est une bonne solution à un tel problème ?
Êtes-vous sûr que vous n'avez qu' @DateTimeFormat(pattern="jj-MMM-aaaa") et c'est sur getter/setter ? Parce que je dois utiliser cette annotation et il accepte le champ vide (Printemps 3.2.4)
Est ce champ qui se passa comme "" ?
L'utilisation d'un sélecteur de date, et de la force de la mise en forme
Dans mon application, j'ai réussi à espionner le contenu de la demande. Le domaine est passé en tant que
Est ce champ qui se passa comme "" ?
L'utilisation d'un sélecteur de date, et de la force de la mise en forme
Dans mon application, j'ai réussi à espionner le contenu de la demande. Le domaine est passé en tant que
name=&
qui est aussi une valeur vide et je le reçois dans mon objet à null (l'intégralité de l'objet est annoté comme @ModelAttribute
)OriginalL'auteur user1459144 | 2014-06-05
Vous devez vous connecter pour publier un commentaire.
Il existe un moyen de faire cela que si vous vous déplacez à partir de Spring MVC validateurs de mise en veille prolongée. Ce n'est pas une grosse affaire parce que Hibernate validateurs bien travailler avec le Printemps du programme de validation de l'interface (vous pouvez également être intéressé par SmartValidator intreface qui prend en charge les groupes).
Après cela, vous pouvez spécifier
@NotNull
annotation sur le champ de date.
Dans le fichier de propriétés juste ajouter
NotNull.[formName].[dateField]
=Ce message sera affiché si aucune date d'envoitypeMismatch.[formName].[dateField]
=Ce message sera affiché si le printemps n'a pas été en mesure de convertir les données d'entrée pour l'objet date (format d'erreur de validation)Pour le format de vérifier si vous pouvez utiliser
CustomDateEditor
.Avec cette solution, vous obtiendrez devrait messages d'erreur de validation dans chaque cas que vous avez spécifié.
OriginalL'auteur d3day
Quand je suis face à un tel problème, j'inverse la logique. Je n'aime pas mettre une valeur par défaut à un champ vide, mais je l'ai pré-charger le champ avec la valeur par défaut dans le rendu de la partie de l'opération. Donc, je peux en toute sécurité valide avec juste
@DateTimeFormat(pattern="dd-MMM-yyyy")
parce qu'un champ vide supposons que l'utilisateur indendly supprimé la valeur par défaut qui est une erreur.Donc, à mon humble avis, vous devez définir vos valeurs par défaut dans la partie de vous-contrôleur pour que la forme et de s'en tenir à un simple
@DateTimeFormat(pattern="dd-MMM-yyyy")
annotation.J'ai une demande à l'aide d'un
@ModelAttribute
annoté objet contenant un champ de date.Dans la classe de l'objet, le champ date est annoté sur getter et setter avec
DateTimeFormat(pattern="dd/MM/yyyy")
. Et le Printemps (3.2.4) accepter une valeur vide pour le champ date qui, tout simplement, il définit à la valeur null. Donc, vous devriez utiliser@DateTimeFormat(pattern="dd-MMM-yyyy")
et toujours être en mesure d'accepter les valeurs null.Si je préremplissage de la valeur et de l'utilisateur gouttes, je comprends qu'il ne veut pas de cette valeur par défaut et qu'il préfère et valeur vide. Donc je ne veux pas en silence persister la valeur par défaut dans la base de données, et je préfère envoyer un message d'erreur indiquant que le champ ne peut être vide (et je vous propose de nouveau la valeur par défaut). Ce serait différent si vous avez dit que la date doit être null si le champ n'est pas vide. De toute façon je sais que j'ai déjà été d'accepter les valeurs null dans les champs annotés avec
@DateTimeFormat(pattern="dd-MMM-yyyy")
. Je vais mettre à jour ma réponse quand je peux trouvé comment.Pour moi, les deux cas sont ok: 1. Dans le cas où l'utilisateur tout abandonné retour: ce champ ne peut être vide;2. En cas d'entrée non valide: vous format de date ..., Mais il semble que le Printemps sera de retour à chaque fois que format incorrect.
J'ai mis à jour ma réponse avec une précision sur le champ vide de gestion.
OriginalL'auteur Serge Ballesta