grails - Groovy/GSP 中鸭子打字的安全操作符

标签 grails groovy gsp

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

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

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

但是,由于我的某些对象没有 getX 方法,因此我收到“无此类属性”异常。如果有某种像“安全运算符(operator)”这样的运算符(operator)来防止 NPE,我会很高兴。有没有不做“instanceof”的好方法来处理这个问题?

最佳答案

恐怕 Groovy 的运算符(operator)不会在这里帮助您。 safe navigation operator ( ?. )如果您要调用方法的引用可能为空,则会对您有所帮助;和 Elvis operator ( ?: )如果您的 x 会帮助您property 将是所有对象的属性,除了其中一些可能为 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> 如果两个选项的逻辑比简单表达式更复杂,则使用标签而不是三元运算符:)

关于grails - Groovy/GSP 中鸭子打字的安全操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271101/

相关文章:

grails - 如何从 config.groovy 中的 message.properties 读取消息

list - Grails:通过远程链接将列表从GSP传递到 Controller

javascript - 通过编程设置类(class)时,嵌套的 Accordion 表格图标不会更改

plugins - Grails CSV插件,CSVWriter示例不起作用

grails - 使用 grails 邮件插件在电子邮件中发送 PDF 附件

tomcat - 数据库可能已在使用中 : “Locked by another process” when starting two grails apps from tomcat

groovy - 检查 List 在 Groovy 中是否有空字符串

java - 如何使用 Jenkins 的 groovy 自动安装 Maven 和 Java JDK8?

grails - 对不存在的资源进行Grails URL映射

grails - 登录默认软件包