concatenar arithmetic freemarker

arithmetic - Diferencia entre ??,has_content, if_existes en freemarker



freemarker module (1)

?? indica si falta el valor del operando de la izquierda (significa que es Java null o si tiene una variable no definida allí), y devuelve false (faltante) o true (no faltante) en consecuencia.

?has_content es muy parecido a ?? , excepto que también devuelve false para una cadena de longitud 0 o una secuencia FTL vacía (como java.util.List , matriz de Java, etc.) o hash FTL vacío (como java.util.Map , etc.). (No devuelve false para un 0 , false booleano, etc.)

! se utiliza para dar un valor predeterminado cuando falta un valor (de nuevo significa que es Java null o que tiene una variable no definida), como el color!"no color" . Si omites el operando de la mano derecha de ! , entonces el valor predeterminado es una cadena vacía y una secuencia vacía y un hash vacío al mismo tiempo (un valor de tipo múltiple), lo cual es útil para escribir cosas como <#list things! as thing> <#list things! as thing> , ${foo!} .

?if_exists es la vieja forma de escribir ?? . No lo uses

Mientras estamos aquí, tenga en cuenta que todos estos operadores solo cubren el último paso de una expresión punteada o [] , como user.price!0 solo se maneja si falta el price del user , pero no si falta el user . Para cubrir ambas posibilidades, use (user.price)!0 , que maneja todos los errores de variables faltantes lanzados durante la evaluación del () , sin importar de dónde provengan.

¿Cuál es la diferencia entre los siguientes en freemarker?

! has_content ?? if_exists

Solía ​​?? En lugar de has_content y que lleva a grandes problemas. Arruiné mi día. Realmente necesito aclarar esto.

Cuando utilicé

!(xyz.abc!)?? -- it dint work

Cuando utilicé

!(xyz.abc!)?has_content ... it did work

No ?? O has_content O if_existes comprueba lo mismo?