h: inputText, das an die Integer-Eigenschaft gebunden ist, sendet den Wert 0 anstelle von null

Wir verwenden einen h:inputText in einer JSF-Seite, die an eine Integer Eigenschaft gebunden ist (und daher null annehmen kann). Wenn kein Wert in h:inputText , h:inputText das Formular eine 0 anstelle von null . Wir verwenden Trinidad 1.2.2 und Tomcat 6.0.20 (wir haben auch mit Tomcat 6.0.14 versucht, da wir gelesen haben, dass dies mit bestimmten Tomcat-Versionen passieren könnte).

Wie wird das verursacht und wie kann ich es lösen?

   

Dieses “Feature” war das Ergebnis eines Bugfixes in EL, der gemäß Tomcat 6.0.16 eingeführt wurde. Gemäß Kapitel 1.18.3 der EL-Spezifikation sollte ein Wert des Zahlentyps, der null ist, auf 0 gezwungen werden. Vor Tomcat 6.0.16 wurde dies “fälschlicherweise” in eine leere Zeichenkette umgewandelt.

Immerhin war eine leere Zeichenfolge viel intuitiver als eine Null. Die Tomcat-Leute von Apache haben sich sehr über diesen Bugfix beschwert, daher haben sie eine neue Konfigurationseinstellung in Form eines VM-Arguments nach Tomcat 6.0.17 eingeführt, das diesen Bugfix deaktivieren würde.

  -Dorg.apache.el.parser.COERCE_TO_ZERO = false 

Ich habe übrigens eine Änderung an dieser Spezifikation angefordert, die nur leere / null primitive Typen auf null und leere / null nicht-primitive java.lang.Number Typen auf leere Zeichenfolge zwingen sollte: JSP EL issue 184 . Sie haben nicht viel damit gemacht, aber das Thema hat zumindest viele Stimmen bekommen. Wer weiß … Dieses Verhalten ist zumindest in der Tat ziemlich ärgerlich, weil es nicht intuitiv ist.

Siehe auch:

  • Der leere String-Wahnsinn
  • Wie mache ich den Zahleneingabebereich zunächst leer anstatt 0 oder 0.00?
  • How-Set -Dorg.apache.el.parser.COERCE_TO_ZERO = programmgesteuert falsch
  • Umgehen Sie für errorshafte INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL in Mojarra JSF 2.1