2009-03-25 8 views
3

Ich brauche eine Geschwindigkeit Dokument zu erstellen, die einige Zeilen mit ¨ ## Foo“vorangestellt hat, aber da die # die Geschwindigkeit Richtlinie Befehl ist, ist es nicht für mich arbeiten.Wie erstelle ich eine Velocity-Vorlage, die zwei '#' Litterals am Anfang der Zeile ausgibt?

Was ich meine Ausgabe Dokument wollen aussehen:.

## Foo this 
## Bar that 
k1, v1 
k2, v2 
k3, v3 

Escaping nicht geklappt hat, wie ich erwartet hatte die unten nicht funktioniert, offensichtlich, da die # s sind un-escaped):

## Foo this 
## Bar that 
#foreach($foo in $bar) 
$foo.key, $foo.value 
#end 

Die ## Zeilen werden nicht angezeigt - wieder wie erwartet. Aber meine Fluchtversuche funktionieren auch nicht. Austretende Lösung ein:

\## Foo this 
\## Bar that 
#foreach($foo in $bar) 
$foo.key, $foo.value 
#end 

oder diese, auf der Flucht Lösung zwei:

\#\# Foo this 
\#\# Bar that 
#foreach($foo in $bar) 
$foo.key, $foo.value 
#end 

oder diese sogar ...

# set($msg = "##") 
$msg Foo this 
$msg Bar that 
#foreach($foo in $bar) 
$foo.key, $foo.value 
#end 

Das letzte verwirrt mich wirklich.

Irgendwelche Ideen?

Antwort

3

Seufz .... Es gibt einen Unterschied zwischen einfachen und doppelten Anführungszeichen. Dies funktioniert wie erwartet:

#set($msg = '##') 
$msg Foo this 

Welche genau druckt, was ich wollte:

## Foo this 

Von der Velocity Users Guide: wird

Einfache Anführungszeichen stellt sicher, dass der angegebene Wert auf die zugeordnet werden Referenz wie es ist. Doppelte Anführungszeichen können Sie Geschwindigkeit Referenzen und Richtlinien verwenden, zu interpolieren, wie „Hallo $ name“

(Ich bin immer noch so ratlos, warum \ # \ # funktioniert nicht.)

-1

"##" ist der einzeilige Kommentartrennzeichen in VTL, der wahrscheinlich der Beginn Ihrer Probleme ist.

## This is a comment 
+1

Offensichtlich und warum sage ich so viel in der Frage. –

3

Wenn Sie nicht org.apache.velocity.tools.generic.EscapeTool oder ähnlich zu Ihrem Kontext hinzufügen möchten, können Sie eine leicht modifizierte Version des dritten Versuch verwenden:

#set($msg = "#") 
${msg}${msg} Foo this 
+0

Das funktioniert und erfordert nicht das Durcheinander mit dem Kontext (was Codeänderungen von mir erfordern würde.) Fantastisch. Ich verstehe nicht, warum "##" nicht funktioniert, aber dieses "#" tut es. : P Aber ich beschwere mich nicht ... es funktioniert! –

+0

Ich gehe davon aus, dass Kommentare, wenn Velocity die Vorlage analysiert, vor allem anderen extrahiert werden.Also alles nach dem Doppel-Hash in der Vorlage würde vollständig verschwinden. Aber ich rate nur. –

Verwandte Themen