L'ho visto nelle pagine GSP generate. Cosa significa il ? significa?Che cosa significa il punto interrogativo nel GSP/Grails?
<g:textField name="name" value="${phoneInstance?.name}" />
L'ho visto nelle pagine GSP generate. Cosa significa il ? significa?Che cosa significa il punto interrogativo nel GSP/Grails?
<g:textField name="name" value="${phoneInstance?.name}" />
E 'la "Navigazione operatore sicuro", che è una caratteristica Groovy che evita in modo conciso eccezioni puntatore nullo. Vedere http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator
In questo caso, se phoneInstance
è null, allora non cercare di ottenere la proprietà name
e causare un NPE - semplicemente imposta il valore del tag campo a null.
L'operatore ?
consente valori nulli in Groovy (e, quindi, GSP). Ad esempio, normalmente in gsp,
<g:field name="amount" value="${priceDetails.amount}" />
Se priceDetails
è nullo, questo sarà gettare un NullPointerException
.
Se si usa l'operatore ?
invece ...
<g:field name="amount" value="${priceDetails?.amount}" />
ora il valore di ${priceDetails?.amount}
è nullo, invece di lanciare un'eccezione di puntatore nullo.
Questa funzione è molto importante in Groovy. Se l'oggetto è nullo (ovvero, "phoneInstance" è nullo), allora fornisce il valore "null". Questa funzione è denominata "Operatore di navigazione sicura". Semplicemente quando usiamo questa funzione, non c'è bisogno di controllare l'oggetto ("phoneInstance") è nullo o no.
l'operatore di navigazione sicura (?.) Restituisce null se l'oggetto a sinistra è nullo, altrimenti restituisce il valore del membro di destra di tale oggetto. così phoneInstance?.name
è solo shorthandn per phoneInstance == null ? null : phoneInstance.name
ad esempio:
a = x?.y
è solo una scorciatoia per:
a = (x == null ? null : x.y)
, che è una scorciatoia per:
if(x == null){
a = null
} else {
a = x.y
}
Grazie! L'ho cercato su Google per un po ', ma non ho trovato una risposta. –
L'url 404s ora – juan
Per maggiore freddezza puoi anche aggiungere un'impostazione predefinita con l'operatore Elvis, ad es .: '$ {phoneInstance? .number?: '+ 44'} 'Rock groovy con il re baby! – barrymac