PrimeFaces Kalender akzeptiert ungültige Daten als Eingabe

8

Das Problem, das ich habe, ist mit dem PrimesFaces 3.4.1 Kalender. Wenn Sie die Popup-Datumsauswahl entweder über die Schaltfläche oder über den Eingabefeld-Fokus aktivieren, können Sie nur gültige Daten auswählen, die gut funktionieren, glückliche Tage!

Das Problem tritt auf, wenn Sie manuell ein Datum in das Eingabefeld eingeben. Wenn Sie ein ungültiges Datum hinzufügen, schätzt die PrimeFaces-Kalenderkomponente diese in ein gültiges Datum um und sendet es dann, was bedeutet, dass die Back-End-Validierung erfolgt ein Nein. Einige interessante Übersetzungen unten:

  • 30/02/2012 wird 2/6/2014
  • 322/05/2012 wird 5/10/2038
  • 14.01.2012 wird 01.04.2012

Um diesen Wahnsinn neu zu erstellen, schaut euch den PrimeFaces-Kalender-Showcase an. p>

Ich habe eine Lösung mit dem readOnlyInput='true' -Attribut gesehen, aber das scheint nur zu verhindern, dass Buchstaben in das Feld eingegeben werden, nicht Nummer oder Schrägstriche. Unten ist eine Instanz des von mir implementierten Kalenders:

%Vor%

Lösungsweise Ich bin offen für alle Vorschläge:

  1. Ist das bei PrimeFaces ein häufiges Problem? Gibt es einen Trick, den ich verwenden kann? repariere es?
  2. Kann ich JavaScript verwenden, um das Datum zu validieren, bevor es gesendet oder gesendet wird? alle Benutzereingaben vollständig blockieren?
  3. An alles andere habe ich nicht gedacht!

Vielen Dank im Voraus, das hat mir seit Wochen Probleme bereitet!

    
JonnyIrving 07.12.2012, 13:07
quelle

2 Antworten

13

Das <p:calendar> verwendet unter den Deckungen SimpleDateFormat welches wiederum standardmäßig nachsichtig analysiert , wodurch die übergelaufenen Werte in die nächste Datumsmetrikstufe übergehen. Z.B. Der 32. Januar wird der 1. Februar usw.

In einfachen Java-Begriffen kann dies durch DateFormat#setLenient() , übergibt false . Siehe auch unter anderem diese Frage: Validieren eines Datums mithilfe des Datumsformats .

In JSF-Begriffen müssen Sie grundsätzlich einen benutzerdefinierten Konverter angeben, der ein nicht-mildes DateFormat verwendet. Glücklicherweise bietet Standard-JSF bereits einen solchen Ansatz im Stil von <f:convertDateTime> , damit Sie es direkt verwenden können.

%Vor%     
BalusC 07.12.2012, 16:12
quelle
0

Fügen Sie in faces-config.xml das

hinzu %Vor%

In der obigen Klasse, d. h. LocaldateConverter, fügen Sie dies unter dem Code

hinzu %Vor%     
Pravin 24.01.2014 13:34
quelle