Come impostare -Dorg.apache.el.parser.COERCE_TO_ZERO = falso a livello di codice

Questa domanda è simile a:

jsf: la proprietà intera associata a un testo di input nell’interfaccia utente è impostata su zero in invio

ma non sono completamente soddisfatto della soluzione. I contesti sono gli stessi: ho un modulo web che richiede un valore intero. Se la casella di testo è vuota, voglio che il mio campo Integer sia ‘null’, ma invece il parser EL imposta automaticamente il mio campo id su ‘0’.

Posso risolvere il problema impostando un parametro JVM nella mia macchina virtuale Tomcat locale:

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

Tuttavia, questo non funzionerà per la macchina del nostro cliente. È ansible impostare / modificare questo parametro JVM “in-code”.

Aggiornamento: ho trovato che questo è stato richiesto ma se qualcun altro ha qualche altra soluzione, mi piacerebbe sentire anche questo.

https://issues.apache.org/bugzilla/show_bug.cgi?id=48813

Aggiornamento 2: Non riesco a cambiare il valore da “0” a “null” perché la mia applicazione dovrebbe considerare “0” come un vero e proprio ID. Quindi ho bisogno di sapere in fase di esecuzione se la casella di testo id è stata lasciata vuota o meno.

È ansible impostare le proprietà di sistema a livello di programmazione utilizzando System#setProperty() .

 System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false"); 

Tuttavia, è necessario assicurarsi che questo sia stato impostato prima che JSF / EL venga inizializzato. Il posto migliore sarebbe un ServletContextListener .

 public class Config implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent event) { System.setProperty("org.apache.el.parser.COERCE_TO_ZERO", "false"); } @Override public void contextDestroyed(ServletContextEvent event) { // NOOP } } 

Registralo come in web.xml , o quando sei già su Servlet 3.0 (Tomcat 7 e così via), con annotazione @WebListener .