2013-05-22 10 views
8

Ho un POJO:metodo di chiamata con parametri nulli nelle EL finisce tra 0 essere passato invece di null

public class Foo { 
    public String getValue(Integer arg0, BigDecimal arg1) {...} 
} 

metto come modello-parametro da Spring MVC in JSP, e cercare di usarlo:

<c:set var="ans" value="${foo.getValue(null, null)}"/> 

Ma in getValue metodo

arg0 = 0 
arg1 = 0 

invece previsto

012.
arg0 = null 
arg1 = null 

ho cercato di eseguire sul Tomcat 7.0.40 e sul pontile 9.0.3

E 'un po' di Tomcat bug, o si tratta di opere modo giusto EL? Come posso chiamare il metodo con parametri null in EL?

Update 1: Diverse fonti, e la documentazione (http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html) dice che l'aggiunta di proprietà JVM

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

lo risolve.

Ma quando l'ho impostato, non succede nulla. Ho impostato corretto

System.getProperty("org.apache.el.parser.COERCE_TO_ZERO")` 

rendimenti "false" in fase di esecuzione)

Può essere Tomcat bisogno di alcune altre impostazioni per modificare per utilizzare questo parametro ...

+0

c'è qualcosa che non mi convince con questo ' '. Durante l'utilizzo di JSTL non è possibile chiamare il metodo in questo modo. Puoi accedere agli attributi invece '$ {foo.value}' e il getter corrispondente verrà chiamato dietro le quinte. Inoltre, non è possibile passare parametri poiché si presume che un getter non sia parametrizzabile – MaVVamaldo

+0

@maVVamaldo, in EL 2.2 è possibile. –

+0

Avendo lo stesso problema. Imposta la proprietà COERCE_TO_ZERO sia nel file catalina.properties di Tomcat7 che in ServletContextLoader e non ha funzionato. – azgolfer

risposta

-1

Per quanto ne so, quando si usa Null, qualsiasi programma è fatto per inizializzare il valore Null su un valore predefinito della primitiva. Ciò significa che i valori int avranno sempre 0, doppio 0.0, booleano sarà falso ecc.

Ciò che si potrebbe fare è effettuare alcuni test aggiuntivi e verificare se i valori sono nulli all'inizio del metodo e in caso sono, per fare alcuni test aggiuntivi.

+0

Integer e BigDecimal inicialize come null, ma non come 0. Solo l'interprete Tomcat EL li rende 0. Quindi in foo.getValue (...) posso ottenere solo 0. –

-1

Prova il sotto di un

public class Foo { 
    public String getValue(String arg0, String arg1) {...} 
} 

Ora u otterrà il risultato atteso, come di seguito

arg0 = null 
arg1 = null 
Problemi correlati