回到顶部
您的当前位置: 编程语言> JAVA> JAVA项目> Velocity
Apache Velocity(七)转义
2014-06-04 00:54:37
标签: 网络整理 Velocity 转义
引用的转义

• 货币符号

$是美元的符号,在文本中出现的"$2.5"这样的字符串,是不会被Velocity解释为一个变量或者一个属性的,因为2.5或者2或者5都不是一个VTL标识符。

• 转义

假如需要在文本中最后显示"$foo"这四个字符组成的字符串本身,而非变量$foo的值,可以使用转义字符(\)。假定$foo已经定义过了,那么:

#set($foo="bar")
$foo                            输出             bar
\$foo                           输出             $foo
\\$foo                          输出             \bar
\\\$foo                         输出             \$foo

假如$foo没有定义,那么:

$foo                            输出              $foo
\$foo                           输出              \$foo
\\$foo                          输出              \\$foo
\\\$foo                         输出              \\\$foo
指令的转义

引用的转义使用"\",指令的转义也是使用"\"。但是,指令的转义要比引用的转义复杂很多。例如:

#if($foo)
    Go!
#end


$foo为true,输出Go!;否则不输出任何内容。

• 使用一个转义符号--"\"

\#if( $foo )
    Go!
\#end


此时,"\"和"#"结合,从而破坏了原本的#if(),而$foo作为判断条件,也不会被解析。
所以上面这段代码,无论$foo是true还是false,结果都是
#if( $foo )
    Go!
#end
这类似于使用了#literal() ... #end指令。

• 使用两个转义符号--"\\"

\\#if( $foo )
    Go!
\\#end

1、$foo为true,输出:\ Go! \
2、$foo为false,输出:\
首先,#if前面的两个"\",它们会被解析为一个"\"。假定$foo是true,那么会输出"Go!",并且是紧跟在刚才的"\"后面(因为没有换号符);若$foo为false则仅输出第一个被解析的"\"。

• 使用三个转义符号--"\\\"

\\\#if($foo)
    Go!
\\#end


前两个"\"被解析为"\",第三个"\"和后面的"#"解析为"#",#if()被破坏。所以输出就是
\#if($foo)
   Go!
\......
注意最后那里,有一个合法的#end,但是它是多余的,所以这一段代码是会报错的