加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

grails – 在Groovy / GSP中进行Duck打字的安全操作符

发布时间:2020-12-14 16:23:15 所属栏目:大数据 来源:网络整理
导读:我是Grails开发的新手,我想知道处理这个问题的标准方法是: 在GSP中,我正在迭代一个域对象列表,很多但不是所有域对象都有getX()方法.我想要一个看起来像这样的标签: g:each in="${myObjects} ${it.x}/g:each 但是,由于我的某些对象没有getX方法,因此我收到
我是Grails开发的新手,我想知道处理这个问题的标准方法是:

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

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

但是,由于我的某些对象没有getX方法,因此我收到了“No such property”异常.如果有某种类似“安全运算符”的运算符阻止NPE,我希望如此.没有做’instanceof’有没有好办法处理这个问题?

解决方法

我担心Groovy的经营者不会在这里帮助你.如果您要调用方法的引用可以为null,则 safe navigation operator (?.)将帮助您;如果你的x属性是所有对象的属性,Elvis operator (?:)会帮助你,除了它们中的一些它可能是null(类似it.x?:’no x here’).

在这种情况下 – 我假设您正在处理不同类的对象的集合,其中一些没有x属性 – 您可以询问该对象是否具有属性x(请注意,如果对象实现了方法名为getX,然后it.hasProperty(‘x’)将为true):

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读