4

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

在 GSP 中,我遍历了一个域对象列表,其中有很多,但不是所有的都有 getX() 方法。我想要一个看起来像这样的标签:

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

但是,由于我的一些对象没有 getX 方法,我得到一个“没有这样的属性”异常。如果有某种操作符,例如阻止 NPE 的“安全操作符”,我会很高兴。有没有不做'instanceof'的好方法来处理这个问题?

4

1 回答 1

7

恐怕 Groovy 的操作员不会在这里为您提供帮助。如果您要调用方法的引用可能为空,则安全导航运算符 ( ) 将为您提供帮助?.如果您的属性是所有对象的属性,Elvis 运算符 ( ) 会为您提供帮助,?:其中x一些对象可能为 null(类似于it.x ?: 'no x here')。

在这种情况下——我假设你正在处理不同类的对象的集合,其中一些没有x属性——你可能会询问对象是否具有属性x(请注意,如果对象实现了一个名为getX, 那么it.hasProperty('x')将是真的):

<g:each in="${myObjects}>
  ${it.hasProperty('x') ? it.x : 'no x here'}
</g:each>

'no x here'用您的备用值替换该位。此外,如果两个选项的逻辑比简单的表达式更复杂,您可以考虑使用<g:if>/标记而不是三元运算符:)<g:else>

于 2012-04-22T19:32:30.527 回答