variable java templates freemarker

java - variable - freemarker module



¿Cómo verificar si existe una variable en una plantilla de FreeMarker? (5)

Para versiones anteriores a FreeMarker 2.3.7

No puedes usar ?? para manejar valores perdidos, la sintaxis anterior es:

<#if userName?exists> Hi ${userName}, How are you? </#if>

Tengo una plantilla de Freemarker que contiene un grupo de marcadores de posición para los que se proporcionan valores cuando se procesa la plantilla. Quiero incluir condicionalmente parte de la plantilla si se proporciona la variable userName, algo así como:

[#if_exists userName] Hi ${userName}, How are you? [/#if_exists]

Sin embargo, el manual de FreeMarker parece indicar que if_exists está en desuso, pero no puedo encontrar otra manera de lograrlo. Por supuesto, podría simplemente proporcionar una variable booleana adicional isUserName y usarla así:

[#if isUserName] Hi ${userName}, How are you? [/#if]

Pero si hay una manera de verificar si existe el nombre de usuario entonces puedo evitar agregar esta variable adicional.


Creo que muchas personas desean verificar si su variable no está vacía y si existe. Creo que comprobar la existencia y el vacío es una buena idea en muchos casos, y hace que tu plantilla sea más robusta y menos propensa a errores tontos. En otras palabras, si comprueba que su variable no es nula Y no está vacía antes de usarla, entonces su plantilla se vuelve más flexible, porque puede arrojar una variable nula o una cadena vacía en ella, y funcionará igual en cualquier caso.

<#if p?? && p?has_content>1</#if>

Digamos que quiere asegurarse de que p sea ​​más que solo espacio en blanco. Entonces podrías recortarla antes de verificar para ver si tiene has_content .

<#if p?? && p?trim?has_content>1</#if>

ACTUALIZAR

Por favor, ignora mi sugerencia: has_content es todo lo que se necesita, ya que hace una comprobación nula junto con el cheque vacío. Hacer p?? && p?has_content p?? && p?has_content es equivalente a p?has_content , por lo que también has_content usar has_content .



También creo que if_exists se usó como:

Hi ${userName?if_exists}, How are you?

que no se romperá si userName es nulo, el resultado si nulo sería:

Hi , How are you?

¡if_exists ahora está en desuso y ha sido reemplazado por el operador predeterminado! como en

Hi ${userName!}, How are you?

el operador predeterminado también admite un valor predeterminado, como por ejemplo:

Hi ${userName!"John Doe"}, How are you?


[#if userName??] Hi ${userName}, How are you? [/#if]

O con la sintaxis estándar de freemarker:

<#if userName??> Hi ${userName}, How are you? </#if>