生成されたGSPページでこれを確認しました。 ?はどういう意味ですか?
<g:textField name="name" value="${phoneInstance?.name}" />
これは「安全なナビゲーションオペレーター」です。これは、Nullポインター例外を簡潔に回避するGroovyの機能です。 http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator を参照してください
この場合、phoneInstance
がnullの場合、name
プロパティを取得してNPEを引き起こそうとせず、フィールドタグの値をnullに設定するだけです。
?
演算子は、Groovy(したがってGSP)でnull値を許可します。たとえば、通常gspでは
<g:field name="amount" value="${priceDetails.amount}" />
priceDetails
がnullの場合、NullPointerException
がスローされます。
代わりに?
演算子を使用すると...
<g:field name="amount" value="${priceDetails?.amount}" />
nULLポインタ例外をスローする代わりに、${priceDetails?.amount}
の値がnullになりました。
左側のオブジェクトが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
}
これはGroovyの非常に重要な機能です。オブジェクトがnullの場合(つまり、「phoneInstance」がnullの場合)、「null」値が提供されます。この機能は「セーフナビゲーションオペレーター」と呼ばれます。単にこの機能を使用する場合、オブジェクト( "phoneInstance")がnullかどうかをチェックする必要はありません。