Grails Groovy/GSP中Duck类型的安全运算符

Grails Groovy/GSP中Duck类型的安全运算符,grails,groovy,gsp,Grails,Groovy,Gsp,我是Grails开发的新手,我想知道处理这个问题的标准方法是什么: 在GSP中,我迭代了一个域对象列表,其中许多对象(但不是所有对象)都有一个getX()方法。我想创建一个如下所示的标记: <g:each in="${myObjects}> ${it.x} </g:each> 恐怕Groovy的操作符在这里帮不了你。如果要调用方法的引用可以为null,则;如果您的x属性是所有对象的属性,则会对您有所帮助,但对于其中一些对象,它可能为空(类似于it.x?:“此处没有x

我是Grails开发的新手,我想知道处理这个问题的标准方法是什么:

在GSP中,我迭代了一个域对象列表,其中许多对象(但不是所有对象)都有一个getX()方法。我想创建一个如下所示的标记:

<g:each in="${myObjects}>
  ${it.x}
</g:each>

恐怕Groovy的操作符在这里帮不了你。如果要调用方法的引用可以为null,则;如果您的
x
属性是所有对象的属性,则会对您有所帮助,但对于其中一些对象,它可能为空(类似于
it.x?:“此处没有x”

在这种情况下——我假设您使用的是不同类的对象集合,其中一些对象没有
x
属性——您可以询问对象是否具有
x
属性(请注意,如果对象实现了一个名为
getX
的方法,那么
it.hasProperty('x')
):


请注意,如果您的对象有一个
getX
方法,那么使用属性语法进行访问应该是
it.x
(注意x上的小写字母)。如果这就是问题所在,那么我下面的答案就毫无意义了。在上面的代码示例中,我将it.X更改为it.X,以避免混淆其他读者。
<g:each in="${myObjects}>
  ${it.hasProperty('x') ? it.x : 'no x here'}
</g:each>