In einem Java-Webprojekt verwenden wir PrimeFaces 4.0 als JSF-Erweiterung. Jetzt hatten wir ein Problem mit der Komponente Spinner (p: spinner) in PrimeFaces. Wir haben den Spinner in unser eigenes benutzerdefiniertes Tag eingebettet, um einige Standardwerte wie den StepFactor und das Gebietsschema festzulegen. Der Rumpf des JSF-Tags sieht folgendermaßen aus:
%Vor%Dies funktioniert genauso wie beim Binden und Rendern der Komponente. Im folgenden Screenshot sehen Sie ein float 2.6f, das im Gebietsschema "de_DE" gesetzt und korrekt formatiert wurde (mit einem Komma anstelle eines Punktes als Dezimaltrennzeichen).
Wenn der Benutzer jedoch die Spinntasten verwendet, um den Wert zu ändern, wird die Formatierung sofort falsch. Der Wert wird von der Komponente sogar falsch geparst. Im nächsten Screenshot können Sie den gleichen Spinner sehen, nachdem wir einmal auf den "up" -Button geklickt haben. Was eigentlich dazu führen sollte, dass in der Komponente ein Wert von "2,70" angezeigt wird.
Hat jemand sonst schon ähnliche Probleme?
Gibt es eine Standardkorrektur für das JavaScript, das die p: spinner-Komponente behandelt, die wir hier anwenden können, oder müssen wir wirklich in die PrimeFaces JS-Bibliothek eindringen und diese selbst beheben?
f:convertNumber
ist eine serverseitige Konvertierung. Das Inkrementieren und Dekrementieren des Wertes ist JavaScript, der f:convertNumber
wird nicht berücksichtigt, bis der Wert zum Server zurückkehrt, daher sollte eine hässliche JavaScript-Lösung ausgeführt werden.
Ich habe einen Patch für dieses Problem erstellt und ich habe Number.prototype.toLocaleString()
Alles, was Sie tun müssen, ist pf.spinner.local.fix.js
und stellen Sie Ihr bevorzugtes Gebietsschema auf die folgende Weise ein (in document.ready
):
Es gibt ein paar Anmerkungen:
Hier ist ein kleines Beispiel auf github und < a href="http://jsf.hatemalimam.com/DailyLab/spinner/main.xhtml"> Demo
Scheint so, als ob Primefaces Spinner I18N nicht unterstützt.
Eine Forumsnachricht, in der Sie aufgefordert werden, Gebietsschemata zu unterstützen, wurde seit 2010 ohne Antwort veröffentlicht: Ссылка
Eine mögliche Lösung wäre, die Extension-Komponente timePicker
von Primefaces zu verwenden und sie anzupassen, um Ihren Wert zu verwalten.
Siehe: Ссылка
Und: Ссылка
Oder Sie könnten versuchen, sich mit JS anzulegen ...
Tags und Links javascript jsf jsf-2 primefaces