3

我需要创建一个速度文档,其中有一些以“## Foo”为前缀的行,但由于这#是速度指令命令,它对我不起作用。

我希望我的输出文档看起来像:

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

逃避并没有达到我的预期。显然,以下内容不起作用,因为#s 未转义):

## 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 回答 4

4

使用速度上下文

${esc.h}${esc.h}
于 2009-03-25T16:32:31.827 回答
3

如果您不想添加org.apache.velocity.tools.generic.EscapeTool或类似于您的上下文,您可以使用第三次尝试的稍微修改的版本:

#set($msg = "#") 
${msg}${msg} Foo this
于 2009-03-25T16:44:03.283 回答
3

叹息....单引号和双引号是有区别的。这按预期工作:

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

这正是我想要的打印出来:

## Foo this

速度用户指南

单引号将确保引用的值将按原样分配给引用。双引号允许您使用速度引用和指令进行插值,例如“Hello $name”

(我仍然对为什么 \#\# 不起作用感到困惑。)

于 2009-03-28T00:13:26.557 回答
-1

“##”是 VTL 中的单行注释分隔符,这可能是您问题的开始。

## This is a comment
于 2009-03-25T16:27:49.547 回答