Как создать шаблон скорости, который выводит два «#» букв в начале строки? - PullRequest
3 голосов
/ 25 марта 2009

Мне нужно создать документ о скорости, в котором некоторые строки имеют префикс ¨ ## Foo ", но поскольку # - это команда директивы скорости, она не работает для меня.

Как я хочу, чтобы мой вывод документ выглядел так:

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

Побег не сработал так, как я ожидал. Очевидно, что приведенное ниже не работает, поскольку # не экранированы):

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

Строки ## не отображаются - снова, как и ожидалось. Но мои попытки сбежать тоже не работают. Выход из решения один:

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

или это, избегая решения два:

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

или даже это ...

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

Этот последний действительно смутил меня.

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 25 марта 2009

Использовать контекст Velocity :

${esc.h}${esc.h}
3 голосов
/ 28 марта 2009

Вздох .... Существует разница между одинарными и двойными кавычками. Это работает как ожидалось:

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

Который печатает именно то, что я хотел:

## Foo this

Из Руководства пользователя по скорости :

Одинарные кавычки гарантируют, что указанное значение будет присвоено ссылке как есть. Двойные кавычки позволяют вам использовать ссылки скорости и директивы для интерполяции, такие как «Hello $ name»

(Я до сих пор не могу понять, почему \ # \ # не работает.)

3 голосов
/ 25 марта 2009

Если вы не хотите добавлять org.apache.velocity.tools.generic.EscapeTool или аналогичны вашему контексту, вы можете использовать слегка измененную версию своей третьей попытки:

#set($msg = "#") 
${msg}${msg} Foo this
0 голосов
/ 25 марта 2009

"##" - это разделитель однострочных комментариев в VTL, который, вероятно, является началом ваших проблем.

## This is a comment
...