2012-12-14 10 views
5

Velocity druckt einfach den Tag-Namen, wenn kein Wert in VelocityContext gefunden wurde, dh $ name in meiner Template-Datei, aber es gibt keinen Wert für "name" in VelocityContext, also wurde nur "$ name" gedruckt. Ich möchte, dass Velocity einen Standardwert druckt, wenn es keinen Wert für die Variable gibt. Ich habe gerade versucht, AbstractCotnext zu erweitern und die Methode internalGet() zu überschreiben, aber der Rückgabewert von internalGet() wird in Node-Objekt umgewandelt, ich weiß es nicht wie man ein neues Node-Objekt in meiner internalGet() -Methode erstellt, und ich denke auch, dass dies sehr komplex ist.kann Velocity einen Standardwert für eine Variable festlegen, wenn in VelocityContext kein Wert gefunden wird?

Gibt es eine einfache Möglichkeit, einen Standardwert zu setzen (der Standardwert ist nur ein String)?

danke.

Antwort

16

nicht leicht für alle Variablen, soweit ich sehe, ich schaffte es nur für einige Variablen ausdrücklich dazu wie folgt vor:

Vorlage:

#if (!$somevar) 
#set ($somevar = "mycontent") 
#end 

Var is: $somevar 

Ergebnis:

Var is: mycontent 
-1

Es gibt ein paar Dinge, die man tun kann, wenn man Velocity-Interna nicht hacken muss. Schauen Sie sich this question an.

2

Google herum für Velocity ReferenceInsertionEventHandler für eine Möglichkeit, es breit zu machen.

Betrachten Sie die DisplayTool der Alt-Taste() -Methode für den Einzelfall (Teil des VelocityTools Projekt)

+0

dank jeder Körper jeden viel, und erlauben Sie mir eine andere Frage zu stellen: Gibt es eine Möglichkeit, den Variablennamen zu ändern, bevor die Ausgabe machen? Der Name der Variablen lautet beispielsweise userName in der Vorlagendatei, aber in VelocityContext lautet der Schlüssel USERNAME. Ich möchte den Variablennamen vor dem Rendern in Großbuchstaben ändern. – hiway

6

eine velocimacro in Ihrer Vorlage erstellen:

#macro(defaultValue $parm) 
#if (!$!parm || $!parm == "") 
i-like-will 
#else 
$parm 
#end 
#end 

Und es wie folgt in der gleichen Vorlage nennen:

#defaultValue($name) 

Überprüfen Sie Apache Velocity - Velocity User Guide für weitere Informationen über Velocimacros (und Geschwindigkeit im Allgemeinen).

+1

Warum hast du \ Symbole vor deinen #s? Ich dachte, dass Makros und if-Anweisungen als #macro definiert wurden und #if nicht \ #if –

+0

Sie sind richtig, ich bin mir nicht sicher, wie die Formatierung alles durcheinander gebracht wurde.Ich habe es behoben. –

+0

Danke, ich dachte, es hätte eine besondere Bedeutung, die ich vermisst habe :-) –

0

Ein wenig zu spät zur Party, aber Sie könnten auch eine Prüfung durchführen, wenn Sie eine Variable definieren. Ich hatte dies zu einer Zeile zu komprimieren überschüssigen Raum in der Ausgabe zu entfernen, aber hier ist ein Beispiel von einem meiner Projekten:

#set ($qlDefault = "qlinks") 
#set ($qlClass = "#if($sharedCtaImage.getChild('path').value != '/')$qlDefault#else$qlDefault full#end") 

Standardklasse definiert ist, ich, wenn ein andere dann überprüfe, wird bestimmter Wert ausgefüllt um festzustellen, ob ich die Standardklasse beibehalten oder eine zusätzliche Klasse anhängen möchte. Dies könnte auch zum Auslagern von Klassen geeignet sein.