PrimeFaces calendrier accepte des dates non valides comme entrée
Le problème que j'ai est avec le PrimesFaces 3.4.1 calendrier. Lors de l'utilisation de la fenêtre contextuelle sélecteur de date est activé soit par le bouton ou sur le champ de saisie vous concentrer vous pouvez uniquement sélectionner les dates de validité qui fonctionnent bien, des jours heureux!
Le problèmes vient lorsque vous ajoutez manuellement une date dans le champ de saisie, si vous ajoutez une date non valide le PrimeFaces composant de calendrier prend ses deviner la conversion de ce sur une date valide et ensuite l'envoyer, ce qui signifie que le back-end de la validation est un no go. Certains intéressant traductions ci-dessous:
- 30/02/2012 devient 2/6/2014
- 322/05/2012 devient 5/10/2038
- 01/14/2012 devient 4/1/2012
De recréer cette folie qui ont un look à la PrimeFaces Calendrier Vitrine.
J'ai vu la solution à l'aide de la readOnlyInput='true'
attribut, mais qui ne paraît empêcher les lettres d'être saisies dans le champ numéro de la ou des barres obliques. Ci-dessous est un exemple du calendrier, j'ai mis en œuvre:
<p:calendar id="fldDateOfBirth"
value="#{pc_CreateUser.user.dateOfBirth}"
binding="#{pc_CreateUser.dobComp}"
navigator="true"
pattern="dd/MM/yyyy"
maxlength="10"
yearRange="-100"
validator="#{pc_CreateUser.validateDOB}"
title="#{msg.user_date_format_default_tip}"
converterMessage="#{msg.user_error_dob_invalid}"
readOnlyInput="true"
showOn="button" />
Solution sage je suis ouvert à toute suggestions:
- Est-ce une des questions communes dans PrimeFaces? Est-il un truc que je peux utiliser pour
résoudre ce problème? - Pourrais-je utiliser JavaScript pour valider la date avant d'être envoyé ou à
bloquer toutes les entrées utilisateur entièrement? - Autre chose que je n'ai pas pensé!
Merci à l'avance, ce qui a été me causer des problèmes pendant des semaines!
OriginalL'auteur JonnyIrving | 2012-12-07
Vous devez vous connecter pour publier un commentaire.
La
<p:calendar>
utilise sous les couverturesSimpleDateFormat
qui à son tour utilise par défaut clément de l'analyse, causant la débordé valeurs de rouler dans la prochaine date de métrique. E. g. 32 janvier deviendra le 1er février, etc.Dans la plaine de Java termes, cette fonction peut être désactivée par
DateFormat#setLenient()
, en passantfalse
. Voir aussi, entre autres cette question: la validation d'une date à l'aide de dateformat.Dans JSF termes, vous avez besoin de fournir un convertisseur personnalisé qui utilise un non-clément
DateFormat
. Heureusement, la norme ACI prévoit déjà de tels un la boîte dans la saveur de<f:convertDateTime>
, vous pouvez donc l'utiliser directement.Vous êtes les bienvenus.
Si vous utilisez l'ancienne version de primefaces à l'aide de cette convertDateTime provoque la conversion de retourner la valeur null, et vous obtiendrez des erreurs javascript. (getDate == null). Si vous pouvez mettre à niveau vers PF 4 sa grande, malheureusement, je ne peux pas et je suis à la recherche de solutions de rechange 🙂
OriginalL'auteur BalusC
Dans faces-config.xml ajouter cette
Dans la classe ci-dessus j'ai.e LocaldateConverter ajouter ce code ci-dessous
OriginalL'auteur Pravin