web-dev-qa-db-ja.com

GSP / Grailsで疑問符はどういう意味ですか?

生成されたGSPページでこれを確認しました。 はどういう意味ですか?

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

これは「安全なナビゲーションオペレーター」です。これは、Nullポインター例外を簡潔に回避するGroovyの機能です。 http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator を参照してください

この場合、phoneInstanceがnullの場合、nameプロパティを取得してNPEを引き起こそうとせず、フィールドタグの値をnullに設定するだけです。

62
Burt Beckwith

?演算子は、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になりました。

4

左側のオブジェクトがnullの場合、安全なナビゲーション演算子(?。)はnullを返します。それ以外の場合は、そのオブジェクトの右側のメンバーの値を返します。したがって、phoneInstance?.namephoneInstance == null ? null : phoneInstance.nameの省略形です

例えば:

a = x?.y

以下の略記です:

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

これは以下の略記です:

if(x == null){
    a = null
} else {
    a = x.y
}
1
james turner

これはGroovyの非常に重要な機能です。オブジェクトがnullの場合(つまり、「phoneInstance」がnullの場合)、「null」値が提供されます。この機能は「セーフナビゲーションオペレーター」と呼ばれます。単にこの機能を使用する場合、オブジェクト( "phoneInstance")がnullかどうかをチェックする必要はありません。

1