GSP / Grails中的问号是什么意思?
我在我生成的GSP页面中看到了这一点。 这是什么? 意思?
<g:textField name="name" value="${phoneInstance?.name}" />
这是“安全的导航操作员”,这是一个简洁的避免空指针exception的Groovyfunction。 请参阅http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator
在这种情况下,如果phoneInstance
为null,那么它不会尝试获取name
属性并导致NPE – 它只是将field标记的值设置为null。
这个?
运算符允许Groovy(以及GSP)中的空值。 例如,通常在gsp中,
<g:field name="amount" value="${priceDetails.amount}" />
如果priceDetails
为null,则会抛出NullPointerException
。
如果我们使用?
而不是…
<g:field name="amount" value="${priceDetails?.amount}" />
现在${priceDetails?.amount}
的值是null,而不是抛出空指针exception。
这在Groovy中是非常重要的特性。 如果对象为空(即“phoneInstance”为空),则提供“null”值。 这个function被称为“安全导航操作员”。 简单地说,当我们使用这个function时,不需要检查对象(“phoneInstance”)是否为空。
如果左侧的对象为空,则安全导航运算符(?。)返回null,否则返回该对象的右侧成员的值。 所以phoneInstance?.name
只是phoneInstance == null ? null : phoneInstance.name
shorthandn phoneInstance == null ? null : phoneInstance.name
phoneInstance == null ? null : phoneInstance.name
例如:
a = x?.y
只是简写:
a = (x == null ? null : xy)
这是简写为:
if(x == null){ a = null } else { a = xy }