2013-05-22 7 views
8

Mam POJO:Wywołanie metody z parametrami zerowymi w El kończy się w 0 przepuszcza zamiast null

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

umieścić go jako modelu parametrach od wiosny MVC do JSP, i starają się go używać:

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

Ale w getValue metody

arg0 = 0 
arg1 = 0 

zamiast oczekiwać

arg0 = null 
arg1 = null 

Próbowałem uruchomić go na Tomcat 7.0.40 i na molo 9.0.3

Czy to jakiś bug Tomcat, czy jest ona właściwa droga EL działa? Jak mogę wywołać metodę z parametrami pustymi w EL?

Aktualizacja 1: Kilka źródeł i dokumentacja (http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html) mówi, że dodanie personelem na JVM

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

rozwiązuje go.

Ale kiedy to ustawiam, nic się nie dzieje. Mam zestaw może skorygować

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

powraca "false" Runtime)

być Tomcat potrzebne jakieś inne ustawienia zmienić aby skorzystać z tej param ...

+0

istnieje coś, co nie przekonuje mnie z tym ' '. Podczas korzystania z JSTL nie można wywołać metody w ten sposób. Możesz uzyskać dostęp do atrybutów zamiast '$ {foo.value}', a odpowiedni getter zostanie wywołany za kulisami. Poza tym nie można przekazywać parametrów, ponieważ zakłada się, że pobierający jest bez parametrów, – MaVVamaldo

+0

@maVVamaldo, w EL 2.2 jest to możliwe. –

+0

Mając ten sam problem. Ustaw właściwość COERCE_TO_ZERO zarówno w pliku catalina.properties Tomcat7, jak iw ServletContextLoader, ale nie działa. – azgolfer

Odpowiedz

-1

O ile mi wiadomo, kiedy użyj wartości Null, program jest wykonywany w celu zainicjowania wartości Null do wartości domyślnej prymitywu. Oznacza to, że wartości int będą zawsze miały wartość 0, podwójne 0.0, wartość logiczna będzie fałszywa itd.

Co można zrobić, to wykonać dodatkowe testy i sprawdzić, czy wartości są zerowe na początku metody, a w takim przypadku, aby przeprowadzić dodatkowe testy.

+0

Integer i BigDecimal inicialize jako null, ale nie jako 0. Tylko Tomcat EL interpretator czyni je 0. Tak więc w foo.getValue (...) mogę uzyskać tylko 0. –

-1

Spróbuj poniżej jednej

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

Teraz u dostanie oczekiwanego rezultatu jak poniżej

arg0 = null 
arg1 = null 
Powiązane problemy