Popolare input con valori nulli in JSF

Se avete utilizzato i componenti delle Java Server Faces vi sarà sicuramente capitato di dover popolare, ad esempio, una combo box (tendina) con valori di tipo intero come ad esempio quelli provenienti da un Enum Java.
Ebbene secondo le specifiche JSF il valore restituito dalla selezione è convertito in 0 nel caso in cui sua valore si NULL ovvero corrisponda a quello della selezione noSelectionOption. Tale comportamento spesso non corrisponde a quanto desiderato, soprattutto se allo 0 è uno dei possibili valori assegnabili o comunque in quei casi in cui il valore NULL è significativo. Ad esempio a me capita spesso di utilizzare le combo nelle maschere di ricerca ed il valore NULL corrisponde in genere a nessun filtro applicato.

Facendo una ricerca su internet tra le soluzioni (spesso banali e poco pratiche) che troviamo, la più ovvia è quella dell’utilizzo dell’opzione COERCE_TO_ZERO a false. Ma come impostarla? La soluzione banale è quella di avviare il container con l’opzione -Dorg.apache.el.parser.COERCE_TO_ZERO=false ma personalmente non sono un fan di questa soluzione.

Quello che preferisco, e che quindi propongo nel post, è di utilizzare un Servlet Container Listener ovvero un oggetto (java) che viene eseguito dal servlet container prima che l’applicazione sia avviata.

Configurandolo poi nel web.xml (il descrittore della vostra applicazione):
Se poi non avete voglia di configurare il tutto ed utilizzate un progetto Maven, la soluzione è disponibile in open source su GitHib e può essere inclusa nel vostro progetto con la dependency:
Non dimenticate di configurare nel vostro pom il Repository Nexus.