documentacion - grails 2.5 docs
¿Qué significa el signo de interrogación en GSP/Grails? (4)
Esta es una característica muy importante en Groovy. Si el objeto es nulo (es decir, "phoneInstance" es nulo), entonces proporciona un valor "nulo". Esta función se llama "Operador de navegación segura". Simplemente cuando utilizamos esta función, no es necesario verificar el objeto ("phoneInstance") es nulo o no.
Vi esto en mis páginas generadas de GSP. ¿Qué hace el ? ¿media?
<g:textField name="name" value="${phoneInstance?.name}" />
El ?
el operador permite valores nulos en Groovy (y por lo tanto, GSP). Por ejemplo, normalmente en gsp,
<g:field name="amount" value="${priceDetails.amount}" />
Si priceDetails
es nulo, arrojará una NullPointerException
.
Si usamos el ?
operador en cambio ...
<g:field name="amount" value="${priceDetails?.amount}" />
ahora el valor de ${priceDetails?.amount}
es nulo, en lugar de arrojar una excepción de puntero nulo.
Es el "Operador de navegación segura", que es una función Groovy que evita de forma concisa las excepciones de puntero nulo. Ver http://docs.groovy-lang.org/latest/html/documentation/index.html#_safe_navigation_operator
En este caso, si phoneInstance
es nulo, entonces no intenta obtener la propiedad del name
y causar un NPE - simplemente establece el valor de la etiqueta de campo en nulo.
el operador de navegación segura (?.) devuelve nulo si el objeto de la izquierda es nulo, de lo contrario, devuelve el valor del miembro derecho de ese objeto. entonces phoneInstance?.name
es solo abreviatura de phoneInstance == null ? null : phoneInstance.name
phoneInstance == null ? null : phoneInstance.name
por ejemplo:
a = x?.y
es solo una abreviatura de:
a = (x == null ? null : x.y)
que es la abreviatura de:
if(x == null){
a = null
} else {
a = x.y
}