2013-05-22 2 views
8

У меня есть POJO:Вызов метода с нулевыми параметрами EL заканчивается в 0 передается вместо нулевой

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

Я положил его в качестве модели-параметра от Spring MVC в JSP, и попытаться использовать его:

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

Но в getValue методе

arg0 = 0 
arg1 = 0 

вместо ожидаемого

arg0 = null 
arg1 = null 

Я попытался запустить его на Tomcat 7.0.40 и на пирсе 9.0.3

Является ли это какой-то Tomcat ошибка, или это правильный путь EL работает? Как я могу вызвать метод с нулевыми параметрами в EL?

Update 1: Несколько источников, и документации (http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html) говорит, что добавление Jvm свойству

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

решает эту проблему.

Но когда я его установил, ничего не произойдет. Я установил, что корректные

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

возвращает "false" в режиме исполнения)

Может быть Tomcat необходим некоторые другие параметры, чтобы изменить, чтобы использовать эти параметры ...

+0

есть что-то, что не убедит меня с этим '<с: множества вар =«ANS» value = "$ {foo.getValue (null, null)}" /> '. При использовании JSTL вы не можете вызвать метод таким образом. Вы можете получить доступ к атрибутам вместо '$ {foo.value}', и соответствующий getter будет вызываться за кулисами. Кроме того, вы не можете передавать параметры, потому что предполагается, что геттер без параметров – MaVVamaldo

+0

@maVVamaldo, в EL 2.2 возможен. –

+0

Имея ту же проблему. Установите свойство COERCE_TO_ZERO как в файле Tomcat7 catalina.properties, так и в ServletContextLoader и не работает. – azgolfer

ответ

-1

Насколько я знаю, когда ты используйте Null, любая программа инициализируется значением Null значением по умолчанию для примитива. Это означает, что значения int всегда будут равны 0, double 0.0, boolean будет ложным и т. Д.

Что вы можете сделать, это сделать дополнительные тесты и проверить, являются ли значения нулями в начале вашего метода и в если они есть, сделать некоторые дополнительные тесты.

+0

Integer и BigDecimal inicialize как null, но не как 0. Просто интерпретатор Tomcat EL делает их 0. Так что в foo.getValue (...) я могу получить только 0. –

-1

Попробуйте менее одного

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

Теперь и будет получить ожидаемый результат, как показано ниже

arg0 = null 
arg1 = null 
Смежные вопросы