## 13.3. 转义 无效的 VTL 指令
VTL 可以通过反斜杠("/")来进行转义,directives can be escaped with the backslash character in a manner similar to valid VTL references.
```
## #include( "a.txt" ) renders as <contents of a.txt>
#include( "a.txt" )
## /#include( "a.txt" ) renders as /#include( "a.txt" )
/#include( "a.txt" )
## //#include ( "a.txt" ) renders as /<contents of a.txt>
//#include ( "a.txt" )
```
在转义在一个单一指令内包含多个脚本元素(比如f-else-end语句)的指令时应多加小心。下面是一个典型的VTL if语句;
```
#if( $jazz )
Vyacheslav Ganelin
#end
```
如果 $jazz为 true,输出是
```
Vyacheslav Ganelin
```
如果 $jazz 为false,将没有输出。转义脚本元素将改变输出。考虑下面的情况;
```
/#if( $jazz )
Vyacheslav Ganelin
/#end
```
不管 $jazz 是真或假,输出都是
```
#if($ jazz )
Vyacheslav Ganelin
#end
```
事实上,因为所有脚本元素都被转义了, $jazz 永远不会被求值。将设反斜杠在被合法转义的脚本元素之前
```
//#if( $jazz )
Vyacheslav Ganelin
//#end
```
这时,如果$jazz 为真,输出是
```
/ Vyacheslav Ganelin
/
```
为理解这个情况,请注意在一个新行结束是将在输出中忽略新的一行。因此,经过#if()前的'//' 加工后,#if()块紧跟第一个'/'。最后一个/位于新的一行,因为在'Ganelin'后又一个新行,所以,最后的那个位于#end 之前的//是语句块的一部分。
如果 $jazz 为false,这里将没有输出。注意,在开始破坏了if语句的情况将不能被正确转义:
```
///#if( $jazz )
Vyacheslave Ganelin
//#end
```
这里,#if 被转义,但有一个#end 被保留了;所以有多个结束语句将导致解析错误。
- 1. 关于
- 2. 什么是Velocity?
- 3. Velocity 可以做什么?
- 3.1. Mud Store 示例
- 4. Velocity模板语言(VTL): 介绍
- 5. Hello Velocity World!
- 6. 注释
- 7. 引用
- 7.1. 变量Variables
- 7.2. 属性
- 7.3. 方法
- 8. 形式引用符Formal Reference Notation
- 9. 安静引用符Quiet Reference Notation
- 11. Case Substitution
- 12. 指令
- 12.1. #set
- 12.2. 字面字符串
- 12.3. 条件
- 12.3.1 If / ElseIf / Else
- 12.3.2 关系和逻辑操作符
- 12.4. 循环
- 12.4.1. Foreach 循环
- 12.5. 包含
- 12.6. 解析
- 12.7. 停止
- 12.10. 宏
- 12.10.1. Velocimacro 参数
- 12.10.2. Velocimacro 属性
- 12.10.3. Velocimacro Trivia
- 13. Getting literal
- 13.1. 货币字符
- 13.2. 转义 有效的 VTL 指令
- 13.3. 转义 无效的 VTL 指令
- 14. VTL 格式化问题
- 15. 其它特征和杂项
- 15.1. 数学特征
- 15.2. 范围操作符
- 15.3. 进阶:转义和!
- 15.4. Velocimacro 杂记
- 15.5. 字符串联