2013-05-22 63 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中使用空參數調用方法?

更新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需要一些其他的設置更改爲使用此PARAM ...

+0

有一些不具有這種''。在使用JSTL時,您不能以這種方式調用方法。您可以訪問屬性,而不是'$ {foo.value}',相應的getter將在幕後調用。此外,你不能傳遞參數,因爲它假定吸氣器是無參數的 – MaVVamaldo

+0

@maVVamaldo,在EL 2.2中是可能的。 –

+0

有同樣的問題。在Tomcat7的catalina.properties文件和ServletContextLoader中都設置COERCE_TO_ZERO屬性,並且不起作用。 – azgolfer

回答

-1

據我知道,當你使用Null,任何程序都會將Null值初始化爲該基元的默認值。這意味着int值將始終爲0,double 0.0,布爾值將爲false等。

您可以做的是進行一些額外的測試,並驗證這些值是否在方法開始時爲空,並且在他們的情況下,進行一些額外的測試。

+0

Integer和BigDecimal的初始化爲null,但不是0.只是Tomcat EL解釋器使它們爲0.所以在foo.getValue(...)中我只能得到0。 –

-1

嘗試下面的一個

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

現在U將得到預期的結果如下

arg0 = null 
arg1 = null 
相關問題