2015-02-11 123 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