问号在GSP / Grails中意味着什么?

时间:2011-01-03 01:39:55

标签: grails groovy operators gsp

我在生成的GSP页面中看到了这一点。 是什么意思?

<g:textField name="name" value="${phoneInstance?.name}" />

4 个答案:

答案 0 :(得分:62)

它是&#34;安全导航操作符&#34;,这是一个Groovy功能,可以简洁地避免空指针异常。见http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator

在这种情况下,如果phoneInstance为null,那么它不会尝试获取name属性并导致NPE - 它只是将字段标记的值设置为null。

答案 1 :(得分:4)

?运算符允许Groovy中的空值(因此,GSP)。例如,通常在gsp中,

<g:field name="amount" value="${priceDetails.amount}" />

如果priceDetails为空,则会抛出NullPointerException

如果我们使用?运算符......

<g:field name="amount" value="${priceDetails?.amount}" /> 

现在${priceDetails?.amount}的值为null,而不是抛出空指针异常。

答案 2 :(得分:1)

  

这是Groovy中非常重要的功能。如果对象为null(即,   “phoneInstance”为null)然后它提供“null”值。此功能   被称为“安全导航操作员”。简单地说,当我们使用此功能时,无需检查对象(“phoneInstance”)是否为空。

答案 3 :(得分:1)

如果左侧的对象为null,则安全导航操作符(?。)返回null,否则返回该对象的右侧成员的值。所以phoneInstance?.name只是phoneInstance == null ? null : phoneInstance.name

的缩写

例如:

a = x?.y

只是简写:

a = (x == null ? null : x.y)

这是:

的简写
if(x == null){
    a = null
} else {
    a = x.y
}