首页 > 代码库 > Velocity魔法堂系列一:入门示例

Velocity魔法堂系列一:入门示例

一、前言                          

  Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力。而且Velocity被移植到不同的平台上,如.Net的NVelocity和js的Velocity.js,虽然各平台在使用和实现上略有差别,但大部分语法和引擎核心的实现是一致的,因此学习成本降低不少哦。

  最好的学习资源——官网:http://velocity.apache.org/

  本系列打算采用如下结构对Velocity进行较为全面的学习,若有不妥或欠缺望大家提出,谢谢。

  1. 入门示例

  2. VTL语法详解

  3. 模板与宿主环境通信

  4. 基础配置项

  5. 深入模板引擎及调优配置

 

二、入门示例                        

  示例结果是生成如下的html表单:

<form action="./submit"><div>  <label for="title">标题:</label>  <input type="text" id="title" name="title"/></div><div>  <label for="brief">摘要:</label>  <input type="text" id="brief" name="brief"/></div><div>  <label for="sex">性别:</label>  <select id="sex" name="sex">    <option value=http://www.mamicode.com/"0">男</option>    <option value=http://www.mamicode.com/"1">女</option>  </select></div><div>  <label for="job">职业:</label>  <select id="job" name="job">    <option value=http://www.mamicode.com/"0">Java工程师</option>    <option value=http://www.mamicode.com/"1">Net工程师</option>  </select></div></form>

   模板文件frm.vm

##表单模板##@author fsjohnhuang##@version 1.0## 引入外部模板文件#parse(macro.vm)## 主逻辑<form action="$action">#foreach($input in $inputs)#input($input.title $input.id)#end#foreach($select in $selects)#select($select.title $select.id $select.items)#end</form>

   模板文件macro.vm

## 生成input表单元素区域的宏#macro(input $title $id)<div>  <label for="$id">$title</label>  <input type="text" id="$id" name="$id"/></div>#end## 生成select表单元素区域的宏#macro(select $title $id $items)<div>  <label for="$id">$title</label>  <select id="$id" name="$id">## VTL指令紧贴左侧才能确保结果的排版正常(不会有多余空格)#foreach($key in $items.keySet())    <option value=http://www.mamicode.com/"$key">$items.get($key)</option>#end  </select></div>#end

   Java代码:

public static void main(String[] args) {        // 初始化模板引擎        Properties props = new Properties();        props.put("file.resource.loader.path", ".\\vm");        VelocityEngine ve = new VelocityEngine(props);        // 配置引擎上下文对象        VelocityContext ctx = new VelocityContext();        ctx.put("action", "./submit");        ArrayList<HashMap<String, String>> inputs = new ArrayList<HashMap<String,String>>();        HashMap<String, String> input1 = new HashMap<String, String>();        input1.put("id", "title");        input1.put("title", "标题:");        inputs.add(input1);        HashMap<String, String> input2 = new HashMap<String, String>();        input2.put("id", "brief");        input2.put("title", "摘要:");        inputs.add(input2);        ctx.put("inputs", inputs);        ArrayList<HashMap<String, Object>> selects = new ArrayList<HashMap<String,Object>>();        HashMap<String, Object> select1 = new HashMap<String, Object>();        selects.add(select1);        select1.put("id", "sex");        select1.put("title", "性别:");        HashMap<Integer, String> kv1 = new HashMap<Integer, String>();        kv1.put(0, "");        kv1.put(1, "");        select1.put("items", kv1);        HashMap<String, Object> select2 = new HashMap<String, Object>();        selects.add(select2);        select2.put("id", "job");        select2.put("title", "职业:");        HashMap<Integer, String> kv2 = new HashMap<Integer, String>();        kv2.put(0, "Java工程师");        kv2.put(1, "Net工程师");        select2.put("items", kv2);        ctx.put("selects", selects);        // 加载模板文件        Template t = ve.getTemplate("test.vm");        StringWriter sw = new StringWriter();        // 渲染模板        t.merge(ctx, sw);        System.out.print(sw.toString());    }

 Velocity模板引擎使用时的关注点分别为以外部文件形式存在的Velocity模板Java代码调用

 Velocity模板由VTL(Velocity Template Language)引擎上下文对象构成;Java代码调用部分则负责初始Velocity引擎构建引擎上下文对象加载Velocity模板启动模版渲染。而Velocity模板与Java代码调用部分通信的纽带就是引擎上下文对象了。

 

三、总结                              

 现在我们对Velocity引擎应该有个大概的了解,后续内容将对上述内容逐一深入。

 尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4112328.html  ^_^肥仔John

 吐槽:倘若对文本的排版有强烈的要求,那么Velocity就不是最佳选择了。

 如上述示例,若想改成如下格式就要重新设计模板形式了:

<form action="./submit">  <div>    .................  </div>  <div>    .................  </div>  <div>    .................  </div>  <div>    .................  </div></form>

Velocity魔法堂系列一:入门示例