2012-09-24 11 views
33

Dire il mio codice Java è List<String> listS =null e mi passa questo al mio file di modello.Come controllare per la lista nulla in freemarker

ora voglio fare in modo che if list has some data then only do something.

ho cercato

<#if listS = null> 
AND 
<#if !listS> 
AND 
<#if listS?size=0> 

Ma nessuno di questi sembra funzionare. Ho un po 'di logica il mio codice java; attraverso il quale, se alcune condizioni sono vere, allora io new questo listS e lo popolano.

Quindi ho bisogno di sapere se il listS è stata popolata o è nullo solo, nel mio file di modello.

Come faccio? Grazie.

EDIT: Inoltre, ho un elenco di strutture, ciascuna contenente questo elenco, (popolato o meno è un problema diverso) e sto passando l'intero elenco di struttura, quindi passando un valore booleano al file del modello lungo con la mia lista di Strutture non è possibile, dato che dovrò attraversare all'interno di ogni lista, e quella traversata che voglio fare nel file template stesso.

EDIT 2: Per coloro che sanno che cosa è Java null, FreeMarker 2.3.x considera come valori mancanti. Semplicemente, il linguaggio template non conosce il concetto di null. Ad esempio, se hai un bean che ha una proprietà maidenName, e il valore di quella proprietà è null, allora è come se non ci fosse alcuna proprietà di questo tipo, per quanto riguarda il template (supponendo che tu non abbia configurato FreeMarker per utilizzare un estremo object wrapper, cioè). Il risultato di una chiamata al metodo che restituisce null viene anche considerato come una variabile mancante (di nuovo, assumendo che si utilizzi un normale wrapper di oggetti). Vedi di più nelle FAQ.

Freemarker Manual

Ma ho ancora havent ottenuto la risposta per il modo di farlo funzionare, se non del tutto quello che posso.

+0

Io suggerirei sempre inizializzare l'elenco e la base la logica fuori dal fatto che la dimensione della lista è maggiore di 0. Anche se si desidera utilizzare questo modo di farlo allora io sono di nessun aiuto, come ho rifugio' Ho usato freemarker prima purtroppo. –

risposta

54

Utilizzare il has_content built-in:

<#if list5?has_content> 
+0

Siamo spiacenti di chiedere qui, ma c'è comunque, posso raggiungere il seguente? Dì che faccio '<#if somwething><# assegna newVar>' Ora più tardi ho bisogno di sapere se c'è una variabile come nuovaVar? – Kraken

+0

'has_content' funzionerà (non esploderà) anche su variabili non esistenti, quindi puoi semplicemente fare' newVar? Has_content' più avanti nel codice e non succederà nulla di male se 'newVar' non viene mai definito/inizializzato. – Bohemian

+0

i.e '<#if nuovoVar? Has_content>' funzionerà ehh? – Kraken

4

è anche possibile utilizzare il missing value test operator, come ad esempio:

<#if listS??> 
    <#list listS.stuff as stuff> 
     ${stuff.value} 
    </#list> 
</#if> 
0
<#list myList![] as element> 
    <#-- do something per element --> 
</#list> 

Se la lista è nullo o vuoto il risultato wil essere vuoto .