2012-12-19 19 views
53

Come gestire i valori null in Freemarker? Ottengo alcune eccezioni nel modello quando i valori null sono presenti nei dati.Gestione valori null in Freemarker

+0

Eventuali duplicati: http://stackoverflow.com/questions/306732/how-to-check-if-a-variable-exists-in-a-freemarker-template – cowls

risposta

65

È possibile utilizzare l'operatore ?? prova:

Questo controlla se l'attributo dell'oggetto non è nullo:

<#if object.attribute??></#if>

Questo controlla se l'oggetto o un attributo non è nullo:

<#if (object.attribute)??></#if>

Fonte: FreeMarker Manual

+1

Qual è la differenza tra questo metodo e has_content ?? –

+2

'has_content', accanto a null-checking, controlla anche se il valore non è vuoto. Questo funziona per stringhe, sequenze, hash o raccolte. Se l'oggetto è una data, booleana o un numero, allora si comporta come non vuoto. Per tutti gli altri tipi agirà come vuoto. –

+0

Ho questo problema dove devo verificare se il valore in bean è nullo. Ho provato il seguente: $ {checknull (Bean.getValue())}, dove checknull se una funzione <#funzione checknull x> <#if x??> <#return ""> <#else> <#return x> ma ottengo "Errore durante l'esecuzione di macro: checknull parametro richiesto: x non è specificato." Errore di –

1

penso che funziona al contrario

<#if object.attribute??> 
    Do whatever you want.... 
</#if> 

Se object.attribute non è nullo, quindi il contenuto verrà stampato.

54

A partire da freemarker 2.3.7, è possibile utilizzare this syntax:

${(object.attribute)!} 

o, se si desidera visualizzare un testo predefinito quando l'attributo è null:

${(object.attribute)!"default text"} 
+1

Per coloro che utilizzano Freemarker come motore di template per XDocReport, questo sta lavorando dopo l'aggiunta di ' org.freemarker freemarker 2.3.22 'al tuo pom.xml. –

+0

Come si fa se si dispone di una data e la data potrebbe essere nullo? In altre parole object.dateAcquired where dateAcquired potrebbe essere null e tu hai $ {object.dateAcquired? Date} –

+1

@StephaneGrenier usa '$ {(object.dateAcquired? Date)!" Not present "}' –

0

Usa ?? operatore alla fine della tua dichiarazione <#if>.

Questo esempio mostra come gestire i valori null per due elenchi in un modello di Freemaker.

List of cars: 
<#if cars??> 
    <#list cars as car>${car.owner};</#list> 
</#if> 
List of motocycles: 
<#if motocycles??> 
    <#list motocycles as motocycle>${motocycle.owner};</#list> 
</#if>