Comment valider le format de date dans un formulaire de Printemps
Je suis nouveau sur le Printemps, et je suis en train de créer un formulaire qui permet de valider un format de date (c'est à dire: il n'accepte que des dates au format "MM/dd/yyyy
" si l'utilisateur met "mm-dd-yyyy
" il doit afficher un message d'erreur).
Comment puis-je y arriver avec le Printemps?
J'ai lu beaucoup de messages et de réponses comme cette et cette, qui recommande l'utilisation de la @InitBinder
dans le contrôleur (j'ai essayé mais je ne pouvais pas le faire fonctionner, btw). Mais que faire si j'ai un formulaire avec des dates différentes? ou si mon contrôleur gère plusieurs post de demande de formes différentes, et chacun des dates différentes validations?
Actuellement, j'ai cette forme:
<form:form action="getReportFile.html" commandName="staticReportForm">
<table>
<tr>
<td>Reports:</td>
</tr>
<tr>
<td><form:select path="report" items="${staticReports}"/>
</td>
</tr>
<tr>
<td>Date (MM/DD/YYYY) (empty for most recent possible):<FONT color="red"><form:errors
path="date" /></FONT></td>
</tr>
<tr>
<td><form:input path="date" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
Et ce serait la fève de la sauvegarde de la forme (la @DateTimeFormat
annotation seulement le faire fonctionner si vous mettez le format correct):
public class StaticReportForm {
@NotEmpty
private String report;
@DateTimeFormat(pattern="MM/dd/yyyy")
private Date date;
public String getReport() {
return report;
}
public void setReport(String report) {
this.report = report;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
OriginalL'auteur Christian Vielma | 2013-02-05
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si il y a un moyen direct de le faire au printemps, mais la façon dont je l'ai fait c'est une combinaison de DatePicker de jQuery et InitBinder.
Dans le JS côté, vous créez un:
Puis dans le JS:
Sur le Contrôleur de côté, créer une méthode comme ainsi:
À partir de là, vous pouvez créer typeMismatch messages dans votre regroupement de ressources pour créer un joli, joli message. L'utilisateur ne sera pas en mesure de saisir manuellement dans le champ, mais au lieu de cela va seulement être en mesure d'utiliser le DatePicker de jQuery, qui sera le format de la date que nécessaire (je pense que la valeur par défaut est MM/jj/aaaa). Dans le cas où ils parviennent à saisir une date, le Printemps va utiliser la configuration de la CustomEditor pour convertir la Chaîne de caractères à partir de la vue à la Date prévue. Si elle échoue, vous obtenez une erreur dans le BindingResults (si vous l'incluez dans votre signature de la méthode). Vous pouvez personnaliser cette méthode, comme je l'ai dit avant, mais la mise en place d'un personnalisé typeMismatch message dans votre regroupement de ressources.
Edit: en Ajoutant des détails supplémentaires que mon explication ci-dessus n'est évidemment pas assez clair...
Tout d'abord, créez un Haricot ou quelque chose pour agir en tant que Modèle d'Attribut (ce que vous envoyez en arrière et en avant à partir de View Controller). S'assurer qu'il dispose d'au moins une date.
Maintenant, vous avez besoin d'un contrôleur. J'aime faire mon Modèle Attributs les attributs de session via le
Il vous faudra alors afficher ("someDefaultView" ci-dessus dans le contrôleur, mon code est JSP dans cet exemple, le Printemps de la bibliothèque de balises JSTL)
Encore une fois, je suggère de Google avec le Printemps Init Liants, cusomizing erreur de liaison (typeMismatch), et la JSR 303 pour des options supplémentaires pour la validation, la plupart de quand est-ce bien documentet ici. Aussi, si vous ne voulez pas l'erreur ci-dessous sur le terrain, comme je l'ai fait ici il y a des moyens pour effectuer une itération, toutes les erreurs en un seul endroit, comme mettre toutes les erreurs en haut de la page. Son très configurable, et je pourrais probablement un autre type de 20 pages la peine d'aller sur tout cela en profondeur. Cela devrait être beaucoup de choses à vous aider à démarrer dans la recherche de bons exemples et de la documentation.
C'est ce que l'InitBinder. Le printemps va tenter de convertir la Chaîne de caractères de la Date à l'aide de l'enregistrés l'éditeur. Si elle échoue, elle remplit dans le BindingResults avec un message d'erreur. La valeur par défaut est assez méchant, mais vous pouvez la remplacer assez facilement, comme mentionné. Dans votre gestionnaire de méthode, il vous suffit de regarder pour voir si il y a des erreurs dans le BindingResults, et si vous le faites avant de retourner à la page du formulaire. Le printemps a été de manipulation BindingResult des erreurs sur votre formulaire, et son assez bien documentée. Même met en place le CSS pour marquer les champs en rouge et pring le message.
Comment dois-je faire? pouvez-vous poster cette réponse à ma question?
Comment voulez-vous faire partie? Si vous faites référence à la façon de traiter les messages d'erreur, ce qui est TRÈS bien documenté dans le static.springsource.org/spring/docs/2.5.4/reference/...
Tout le chemin, je veux envoyer un formulaire avec une date dans un format strict, et quand il est reçu par le contrôleur, je peux être sûr qu'il est dans le bon format ou sinon une erreur est affiché à l'utilisateur.
OriginalL'auteur CodeChimp