2012-09-24 6 views
33

Sagen Sie, dass mein Java-Code List<String> listS =null hat, und ich überlasse dies meiner Vorlage-Datei.So überprüfen Sie auf Null Liste in Freimarker

Jetzt möchte ich sicherstellen, dass if list has some data then only do something.

Ich habe

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

Aber keiner von ihnen scheinen zu funktionieren. Ich habe ein bisschen Logik, ich habe Java Code; durch die, wenn eine Bedingung wahr ist, dann diese listS und füllen Sie es.

Daher muss ich wissen, ob die listS in meiner Vorlagendatei ausgefüllt wurde oder nur Null ist.

Wie mache ich das? Vielen Dank.

EDIT: Ich habe auch eine Liste von Strukturen, von denen jede diese Liste enthält, (bevölkert oder nicht ist ein anderes Problem), und ich übergebe die gesamte Liste der Struktur, also einen booleschen Wert an die Vorlage übergeben mit meiner Liste der Strukturen ist nicht möglich, da ich innerhalb jeder Liste durchqueren muss, und diese Traversierung möchte ich in der Vorlagendatei selbst machen.

EDIT 2: Für diejenigen, die wissen, was Java Null ist, behandelt FreeMarker 2.3.x sie als fehlende Werte. Die Template-Sprache kennt das Konzept Null einfach nicht. Wenn Sie zum Beispiel eine Bean haben, die die Eigenschaft maidenName hat, und der Wert dieser Eigenschaft null ist, dann ist das das Gleiche, als ob es überhaupt keine solche Eigenschaft gäbe, sofern die Vorlage betroffen ist (vorausgesetzt, Sie haben dies nicht getan) FreeMarker wurde so konfiguriert, dass ein extremer Objektwrapper verwendet wird. Das Ergebnis eines Methodenaufrufs, der null zurückgibt, wird auch als fehlende Variable behandelt (vorausgesetzt, Sie verwenden einen üblichen Objektwrapper). Weitere Informationen finden Sie in den FAQ.

Freemarker Manual

Aber ich immer noch die Antwort für havent, wie es funktioniert, wenn überhaupt, kann ich.

+0

Ich würde vorschlagen, immer die Liste zu initialisieren und Ihre Logik davon ab, ob die Größe der Liste größer als 0 ist. Obwohl, wenn Sie diese Art der Durchführung verwenden möchten, dann bin ich keine Hilfe, wie ich 'haven' Ich habe Freemarker vorher leider benutzt. –

Antwort

54

Verwenden Sie die has_content eingebaut:

<#if list5?has_content> 
+0

Sorry, es hier zu fragen, aber gibt es trotzdem, kann ich folgendes erreichen? Sag, ich mache '<#if somwething><# assign newVar>' Nun muss ich später wissen, ob es eine Variable als newVar gibt? – Kraken

+0

'has_content' wird auch bei nicht existierenden Variablen funktionieren (nicht explodieren), so dass Sie später' newVar' has_content' im Code ausführen können und nichts schlimmes passiert, wenn 'newVar' nie definiert/initialisiert wird. – Bohemian

+0

ie '<#if newVar? Has_content>' wird funktionieren eh? – Kraken

0
<#list myList![] as element> 
    <#-- do something per element --> 
</#list> 

Wenn die Liste leer ist oder das Ergebnis leer wil leer sein .