Myślalem, że JSF nie ma już przede mną większych tajemnic, gdy w projekcie objawił się nam następujący błąd:
JSF domyślnie z automatu zamienia formularzowe puste inputy na odpowiadające im 0 lub puste stringi. Inaczej mówiąc jeśli użytkownik do takiego inputTextu nic nie wpisze to referencja age zamiast być pusta (null) wskazywać będzie na 0.
<h:inputText id="age"
value="#{exampleManager.age}" converter="IntegerConverter" />
Gdyby age było Stringiem, wówczas JSF przypisałby pod niego “”.
Rozwiązanie tego ‘problemu’ okazało się trywialne choć dziwne (stąd ta notka). Należało zmienić domyślną wartość flagi Tomcata COERCE_TO_ZERO poprzez ustawienie odpowiedniego parametru uruchomieniowego:
-Dorg.apache.el.parser.COERCE_TO_ZERO=false
Domyślna wartość COERCE_TO_ZERO ustawiona jest na true. Oczywiście można tego dokonać również z poziomu kodu aplikacji – jak dla mnie rozwiązanie takie jest dużo bardziej elastyczne i eleganckie:
System.getProperties().
put("org.apache.el.parser.COERCE_TO_ZERO", "false");
Projekt w którym objawił się ten problem pracuje na JBossie (posiadającym w sobie Tomcata), jak aplikacja ta zachowała by się na innych serwerach aplikacyjnych i jak wówczas poradzić sobie z opisywanym ‘wymuszaniem’ – kiedyś może się dowiem…


