无法检查grails中的空数据

时间:2015-03-25 13:36:36

标签: grails

我有一个数据,

def data = [[name : '', users : []]]

我尝试以各种方式检查数据是否为空,但它不再起作用。 例如,

if(data.name == null){
   println 'empty'
}else{
   println 'not empty'
}

或者

if(data.name == ''){
   println 'empty'
}else{
   println 'not empty'
}

它始终打印并非空白'。 我怎样才能检查是否为空?

3 个答案:

答案 0 :(得分:1)

data是一个列表,data.name暗示data*.nameSpread Operator)。因此,清楚地检查null''不会对列表产生影响。

所以你的支票应该是data.name==[null]或类似的东西。 e.g。

groovy:000> data = [[name : '', users : []]]
===> [[name:, users:[]]]
groovy:000> data.name
===> []
groovy:000> data.name==['']
===> true

要利用Groovy Truth(其中空字符串和null都是" falsey")您可以检查,如果所有名称都设置为:

if (data.name.every()) print "got all names"

如果您只是在那里获得列表但不需要它,则适用与Groovy Truth相同的规则,并且以下检查就足够了:

 if (data.first().name) print "got name"

答案 1 :(得分:0)

如果您选中data.name.class,它会为您提供课程java.util.ArrayList 这意味着您应该使用name访问data[0].name密钥。 所以,如果你这样做:

if(data[0].name == ''){
   println 'empty'
}else{
   println 'not empty'
}

它会打印empty

答案 2 :(得分:0)

因为他们都说data.name是列表。所以没有意义,不可能将列表与空字符串或null进行比较。因为data.name的可能值是空列表字符串列表

所以基本上要实现你需要的东西,你可能需要迭代从data.name返回的每个项目,如下所示:

def data = [[name : '', users : []]]

data*.name.every(){
    if(it == '' || it == null)
        println "Name is empty."

     else
         println "Name is not empty."

}