2015-02-11 85 views
0

我在我的服務類中編寫了一個函數,用於評估從控制器傳遞的參數,但Grails返回錯誤的評估結果。Grails對錶達式的錯誤評估

def list(String q,String qval,String srt,String ord){ 
log.debug("q==="+q) 
log.debug("qval==="+qval) 
log.debug("srt==="+srt) 
log.debug("order==="+ord) 

所有這些調試語句按預期打印爲空。現在

boolean qvalbool=qval?.trim() 
log.debug("qvalbool===>>"+qvalbool) prints true!!! 

!StringUtils.isEmpty(q) && !StringUtils.isEmpty(qval) returns true!! 

這兩個語句應返回false,而他們正在返回true這是怎麼回事?有任何想法嗎?

我使用Grails 2.4.2

+2

也許輸入是「空」作爲字符串?這就是爲什麼當你打印它們時你會看到null的原因? – evanwong 2015-02-11 19:53:14

+0

輸入爲空,但條件結果在顯示爲真時應爲false – 2015-02-11 19:55:09

+2

運行調試程序並檢查確切值是什麼。正如@evanwong提到的 - 你可能會得到''null''而不是'null',這就是爲什麼其他條件被評估爲'true'的原因。如果你想打印確切的數據類型,試試'log.debug(q?.dump())',看看你是否得到'null'或'' – 2015-02-11 20:07:17

回答

2

Evan Wong的評論很可能是正確的,你看到包含單詞空的字符串。

通常,當Groovy打印出值時,並不清楚它們的類型是什麼。

groovy:000> null 
===> null 
groovy:000> 'null' 
===> null 

而且在Groovy表達null + ''計算得到字符串'null'

這將是一個簡單的方法來更改此參數的值,因此它包含字符串'null'。

+0

感謝這是問題我將「'添加到null,其結果爲'null'。 – 2015-02-11 20:24:13