一、传递实体对象给模板
1. PageInfo实体类
之前我们都是用单个字符串传递,但是这样效率太低,而且代码维护也不方便,我们可以通过封装实体对象的方式,会使得代码更具直观
public class PageInfo
{
private bool IsShowImage;
public bool IsShowImage1
{
get { return IsShowImage; }
set { IsShowImage = value; }
}
}Code language: C# (cs)
- 私有字段
IsShowImage,对外暴露属性IsShowImage1 - 模板中访问:
$info.IsShowImage1
2. 填充上下文数据
//模板上下文容器
IContext context = new VelocityContext();
PageInfo pi = new PageInfo();
pi.IsShowImage1 = true;
//将对象pi以键名info存入上下文
context.Put("info",pi);
//字符串变量示例
context.Put("infotitle","你好");Code language: C# (cs)
context.Put("键名",数据):把数据交给模板,模板通过$键名获取。
二、Velocity模板核心语法
1. 关键字标识 #
以#开头为指令,常见:#if、#else、#end、#foreach、#set、#include
条件渲染示例:
请实现准备两张图片,放到网站根目录下的Contents/Images里面,通过设置IsShowImage1可以显示不同的图片
#if($info.IsShowImage1)
<img src="./Contents/Images/a.gif" />
#else
<img src="./Contents/Images/b.gif" />
#endCode language: PHP (php)
逻辑:当IsShowImage1=true展示a.gif,否则展示b.gif
2. 变量标识 $
$变量名:输出变量值${变量名}:界定变量边界(重点!)
场景:变量后紧跟英文,引擎无法区分变量名范围
错误写法:$infotitlefoxdevelop.com
引擎会识别成变量名叫 infotitlefoxdevelop,不存在!
正确写法:${infotitle}foxdevelop.com
引擎识别 infotitle 为变量,后面拼接字符串foxdevelop.comCode language: PHP (php)
3. 静默符 ! → $!变量名
默认行为:如果变量不存在,页面原样输出$变量名文本$!变量名:变量不存在或者为null时,输出空白,不打印$符号
对比示例:
| 写法 | 变量存在(值=”你好”) | 变量不存在 |
|---|---|---|
$infotitle | 你好 | $infotitle |
$!infotitle | 你好 | (空白,什么都不显示) |
${infotitle} | 你好 | ${infotitle} |
$!{infotitle} | 你好 | 空白 |
完整测试代码:
${infotitle}foxdevelop.com <br/>
$!infotitlefoxdevelop.com <br/>
$infotitle <br/>
$!infotitle <br/>Code language: HTML, XML (xml)
总结
- 变量后面拼接文字,务必使用
${变量}包裹 - 生产环境优先使用
$!{变量名},防止变量为空时页面打印原始$xxx破坏布局 #if判断布尔属性,直接写#if($info.IsShowImage1),不需要额外==true
Previous: NVelocity介绍
Next: 模板中设置变量