Mauvais format de date lors de la soumettre Printemps formulaire
J'ai un projet où j'utilise Spring MVC et Thymeleaf.
J'ai besoin d'afficher des dates avec un format différent pour chaque utilisateur en fonction de ses préférences.
Par exemple, UserA souhaitez afficher les dates comme jj/MM/aaaa et UserB souhaitez afficher les dates comme jj/MM/aaaa.
Pour ce faire, j'utilise ce thymeleaf paramètre:
th:value="${#dates.format(myDate, dateFormat)}"
La valeur "dateFormat" est basée sur la préférence de l'utilisateur. Cela fonctionne très bien.
Mon problème est que la date d'entrée est en forme, et quand j'ai envoyé le formulaire, il ne prend pas le bon format. J'ai toujours jj/MM/aaaa.
Si j'ai à choisir le format jj/MM/aaaa et entrez 18/01/2016, dans mon printemps contrôleur-je obtenir "Jeu Juin 01 00:00:00 CEST 2017", qui correspondent à 01/06/2017 jj/MM/aaaa.
Que puis-je faire pour avoir la date au format que je veux?
Voici mon code:
<form th:action="@{/test}" th:object="${filter}" th:method="POST">
<input type="date" th:type="date" class="form-control" th:id="myDate"
th:name="myDate" th:value="${#dates.format(filter.myDate, dateFormat)}"/>
</form>
Contrôleur:
@RequestMapping(value = "/test", method = RequestMethod.POST)
public String myTest(@ModelAttribute Filter filter, Model model) {
Systeme.out.println(model.dateFormat);
//dd/MM/yyyy
Systeme.out.println(filter.myDate.toString());
//Thu Jun 01 00:00:00 CEST 2017
return "test";
}
OriginalL'auteur YLombardi | 2016-01-18
Vous devez vous connecter pour publier un commentaire.
Après une journée de recherche, j'ai trouvé que le Printemps lire la valeur qui est envoyé dans la requête web et d'essayer de le lier avec l'objet du Filtre.
Pour une valeur de date, sauf à trouver une valeur avec le "jj/MM/aaaa". Si vous envoyez une valeur avec un autre format, il ne fonctionne pas.
Pour résoudre ce problème, vous pouvez utiliser l'annotation "InitBinder".
Cette méthode est exécutée pour chaque requête web. Ici je l'appelle mon "dateFormat()" méthode pour obtenir le format dans la préférence de l'utilisateur et de dire au Printemps que toutes les java.util.Date à laquelle il trouver dans le web demandes ont ce format.
Voici mon code complet :
Filtre :
Contrôleur :
HTML :
J'ai rencontré un problème qui m'a conduit à cette question. Je vais utiliser votre exemple pour illustrer le problème. Dans
testDatePost()
, si je devais@ModelAttribute("filter") TestDateFilter filter
sur le modèle avant de revenir (en cas d'erreurs), le format de la date remonte à la valeur par défautDate.toString()
valeur. Par exemple, mon@InitBinder
valeur produite2018-05-15 19:04:03.0
mais quand je passe en retrait de la POSTE, il passe commeTue May 15 19:04:03 PDT 2018
qui est ce que cette réponse fixe dans l'affaire de juste l'écran de chargement. Cette seulement la moitié de ma question.merci pour le partage! Je suis tombé sur la même question et cette réponse a fonctionné du premier coup
OriginalL'auteur YLombardi
Vous pouvez annoter l'attribut Date
sans Joda dépendance depuis le Printemps 3.2
OriginalL'auteur Pierpaolo Pagnoni
Je pense qu'il y a de la difficulté parce que le Printemps ne comprennent pas que la saisie de la valeur est une Date.
Est votre variable madate de type java.util.Date?
Si c'est le cas, essayez d'enregistrer un formateur comme ça :
Puis de l'enregistrer dans votre configuration :
Mais je ne sais pas comment faire, il fonctionne de manière dynamique comme vous voulez...
Sont les utilisateurs les préférences de stocker dans la base de données ou dans les propriétés?
OriginalL'auteur sanluck