基本语法

一、传递实体对象给模板

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)

总结

  1. 变量后面拼接文字,务必使用 ${变量} 包裹
  2. 生产环境优先使用 $!{变量名},防止变量为空时页面打印原始$xxx破坏布局
  3. #if 判断布尔属性,直接写#if($info.IsShowImage1),不需要额外==true

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注