变量预设:#set ($valok = "hello foxdevelop")
变量边界 ${} 与 . 访问辨析
| 代码 | 渲染结果 | 原理说明 |
|---|---|---|
$valok | hello foxdevelop | 基础变量输出 |
$valok.com | hello foxdevelop.com | Velocity尝试调用valok对象的cn属性/方法;字符串无cn方法,原样输出变量+后缀 |
${valok}.com | hello foxdevelop.com | {}锁定变量边界,变量valok渲染完成后拼接文字.com(推荐拼接写法) |
$!valok.com | hellofoxdevelop.com | $!静默引用:变量存在等价$valok;变量不存在输出空字符串,不会原样显示$xxx |
${valok.com} | 空白 | 尝试读取valok.com属性,字符串没有com方法/属性,变量不存在;如果写成$!{valok.com}才会输出空 |
${valok}.cn ✅ 变量 + 后缀拼接${valok.cn} ❌ 访问对象valok下的cn属性
单引号 / 双引号 & 变量粘连
| 代码 | 渲染结果 | 原理说明 |
|---|---|---|
what$valok | whathello foxdevelop | 直接拼接,Velocity自动识别变量边界 |
what$"valok" | what$”valok” | ❌语法错误写法,$后面不能直接跟引号,无法识别变量 |
what"$valok" | what”hello foxdevelop“ | 引号只是普通文本,模板内的引号不触发字符串解析,变量正常渲染 |
what'$valok' | what’hello foxdevelop‘ | 同上,单引号属于普通文本字符 |
$valokwhat | $valokwhat | ❌无法识别变量!Velocity把valokwhat整体当成变量名,找不到该变量,原样输出 |
${valok}what | hello foxdevelopwhat | ✅大括号锁定边界,完美解决变量和文字粘连问题 |
总结
- 变量粘连场景务必使用
${变量名}
错误:$valokwhat;正确:${valok}what - 拼接后缀文本:
${valok}.cn不要写成${valok.cn} $!变量静默引用:变量不存在时输出空白,不会打印$xxx- 模板HTML里的单/双引号只是普通字符;只有#set赋值内部才区分单引号(不解析变量)、双引号(解析变量)
#set($a = "$valok") // 双引号:解析变量,a=hello bamn
#set($a = '$valok') // 单引号:不解析变量,a=$valokCode language: PHP (php)