Como faço para criar um modelo de velocidade que produz dois '#' litterals no início da linha?
Pergunta
Eu preciso criar um documento de velocidade que tem algumas linhas prefixadas com ¨ ## Foo", mas desde que o #
é o comando directiva velocidade, ele não está funcionando para mim.
O que eu quero a minha saída documento para olhar como:
## Foo this
## Bar that
k1, v1
k2, v2
k3, v3
Escaping não funcionou como eu esperava. O abaixo não funcionar, obviamente, como as #
s são un-escapado):
## Foo this
## Bar that
#foreach( $foo in $bar )
$foo.key, $foo.value
#end
As ## linhas não aparecem - novamente, como esperado. Mas, minhas tentativas de escapar não quer trabalhar. Escapando solução one:
\## Foo this
\## Bar that
#foreach( $foo in $bar )
$foo.key, $foo.value
#end
ou presente, escapando solução de dois:
\#\# Foo this
\#\# Bar that
#foreach( $foo in $bar )
$foo.key, $foo.value
#end
ou até mesmo isso ...
# set($msg = "##")
$msg Foo this
$msg Bar that
#foreach( $foo in $bar )
$foo.key, $foo.value
#end
Este último realmente me confundiu.
Todas as idéias?
Solução 3
Suspiro .... Há uma diferença entre aspas simples e aspas duplas. Isso funciona como esperado:
#set($msg = '##')
$msg Foo this
que imprime exatamente o que queria:
## Foo this
A partir Velocity Guia do Usuário do :
As aspas simples irá garantir que o valor citado será atribuído à referência como é. aspas duplas permitem que você use referências de velocidade e diretrizes para interpolar, como "Olá $ nome"
(eu ainda estou perplexo quanto ao porquê \ # \ # não funciona.)
Outras dicas
Use a contexto Velocity :
${esc.h}${esc.h}
Se você não quiser adicionar org.apache.velocity.tools .generic.EscapeTool ou semelhante ao seu contexto, você pode usar uma versão ligeiramente modificada de sua terceira tentativa:
#set($msg = "#")
${msg}${msg} Foo this
"##" é a única linha delimitador de comentário em VTL, que é provavelmente o começo de seus problemas.
## This is a comment