`

Velocity教程

    博客分类:
  • JEE
阅读更多
我们通过一个简单的实例来讲解一下velocity的使用过程

import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.app.VelocityEngine;
public class Simple1 {
  /**
   * 入门,标准velocity的使用
   */
  public static void main(String[] args) {
    // 创建引擎
    VelocityEngine ve = new VelocityEngine();
    // 设置模板加载路径,这里设置的是class下
    ve.setProperty(Velocity.RESOURCE_LOADER, "class");
    ve.setProperty("class.resource.loader.class",      
                  // 即上一句的key.RESOURCE_LOADER的值.class
        "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
    try {
      // 进行初始化操作
      ve.init();
      // 加载模板,设定模板编码
      // 这里的gbk不是必须的,但是我的模板中使用了中文所以要指定编码规则。 
      Template t = ve.getTemplate("test/velocity/simple1.vm", "gbk");
      // 也可以使用Velocity.setProperty
         (Velocity.FILE_RESOURCE_LOADER_PATH, loadpath);
      // loadpath是路径地址 
      // 设置初始化数据
      VelocityContext context = new VelocityContext();
      context.put("name", "张三");
      context.put("project", "Jakarta");
      // 设置输出
      StringWriter writer = new StringWriter();
      // 将环境数据转化输出
      t.merge(context, writer);
      // 简化操作
      // ve.mergeTemplate("test/velocity/simple1.vm", "gbk", context, writer );
      System.out.println(writer.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


## 第一个例子
你好 $name !
$project project.





velocity虽然已经为我们提供了一些资源加载器,基本已经可以满足大部分的用户需求。有的时候还需要我们必须手动去写一些,比如:我们打算采用 String的模板而不是vm文件形式,为的是将模板存入db中。
这是我们只需要继承org.apache.velocity.runtime.resource.ResourceLoader 并实现我们想要的功能。
下面的例子就是拿上面的需求来进行一个简单的实现。

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.apache.commons.collections.ExtendedProperties;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.resource.Resource;
import org.apache.velocity.runtime.resource.loader.ResourceLoader;

public class MyResourceLoader extends ResourceLoader {
  public long getLastModified(Resource arg0) {
    return 0;
  }

  public InputStream getResourceStream(String arg0)
      throws ResourceNotFoundException {
    InputStream result = null;
    if (arg0 == null || arg0.length() == 0) {
      throw new ResourceNotFoundException("模板没有被定义~!");
    }
    result = new ByteArrayInputStream(arg0.getBytes());
    return result;
  }

  public void init(ExtendedProperties arg0) {
  }

  public boolean isSourceModified(Resource arg0) {
    return false;
  }
}

    // 修改如下几行
    ve.setProperty(Velocity.RESOURCE_LOADER, "str");
    ve.setProperty("str.resource.loader.class",
        "test.velocity.MyResourceLoader");
    Template t = ve.getTemplate("你好 $name!\r\n$project project", "gbk");



其他功能展示
import java.io.StringWriter;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.tools.generic.DateTool;

public class Simple3 {
  public static void main(String[] args) {
    try {
      Velocity.init("src/velocity.properties");
      VelocityContext context = new VelocityContext();
      // 历遍集合/数组
      context.put("list", Arrays.asList("第一个", "第二个", "第三个"));
      // 历遍Map集合
      Map<String, String> map = new HashMap<String, String>();
      map.put("key1", "value1");
      map.put("key2", "value2");
      context.put("map", map);
      // 判断分支
      context.put("flag", true);
      // 格式化日期
      context.put("now", new Date());
      context.put("dateformat", new DateTool());
      // NUll处理 输出 $title
      context.put("title", null);
      Template template = Velocity.getTemplate("src/template.vm");
      StringWriter sw = new StringWriter();
      template.merge(context, sw);
      sw.flush();
      System.out.println(sw.toString());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}


#foreach($element in $list)
  $element
#end

#foreach($key in $map.keySet())
  $key = $map.get($key)
  $velocityCount > $key=$map.get($key)
#end

#*
velocityCount 变量名可以通过directive.foreach.counter.name属性修改,
如:directive.foreach.counter.name =index,以后可以通过$index进行访问。
迭代的索引默认从1开始,我们可以通过directive.foreach.counter.initial.value=0进行修改。
*#

##在模版中进行赋值
#set($name="xace")
$name
#set($condition=true)
$condition
#set($ints = [1..10])
#foreach($entry in $ints)
  $entry
#end
#set($strs = ["一","二","三"])
#foreach($entry in $strs)
  $entry
#end


#if($flag) 成立
#else 不成立
#end

$dateformat.format("yyyy-MM-dd", $now)

$title



velocity.properties
引用
#指定日志文件存放位置
runtime.log = E:\\spring\\velocity\\velocity_example.log
#指定模版文件加载位置
file.resource.loader.path=E:\\spring\\velocity
#指定输入编码格式
input.encoding=UTF-8
#指定velocity的servlet向浏览器输出内容的编码
default.contentType=text/html; charset\=UTF-8
#指定输出编码格式
output.encoding=UTF-8


分享到:
评论

相关推荐

    velocity教程

    Velocity教程主要涵盖了以下核心知识点: 1. **基础语法**:Velocity使用特殊的指令(Directives)和变量(Variables)来控制模板的处理。例如,`#set`指令用于赋值,如`#set( $monkey = $bill )`,这将变量`$...

    Java进阶教程Velocity快速掌握模板引擎视频

    但是遗憾的是 , 市面上并没有一款详细的Velocity教程 , 特别是最新版本的velocity使用, 相关资料更是少的可怜 ! 所以我们这套课程有如下特色 : l 从基础开始 : 只要有一些java开发的基础就可以学习第一部分velocity...

    velocity 教程

    Velocity教程 Velocity是一种基于Java的模板引擎,它允许开发者将逻辑和表示分离,使得HTML、XML等文件可以独立于应用程序代码进行更新。Velocity提供了一种简单但强大的语法,用于处理变量、控制结构(如循环和...

    Velocity 教程

    Velocity 教程 Velocity 是一个基于 Java 的模板引擎(template engine),它允许开发人员使用模板语言(template language)来引用由 Java 代码定义的对象。 Velocity 的出现使得界面设计人员和 Java 程序开发人员...

    velocity标签 、velocity教程

    打开网址:http://www.web-tag.net/all_17.htm 就是velocity标签大全 、教程 或下载CHM格式帮助文档

    velocity中文文档 教程

    同时,网上有许多教程和论坛讨论,可以帮助解决实际开发中的问题。 总的来说,Velocity是一个强大且灵活的模板引擎,它简化了Web开发中的视图层处理,提高了开发效率和代码质量。通过熟练掌握Velocity,开发者可以...

    velocity经典4pdf中文教程

    这个压缩包包含了四本关于Velocity的经典中文教程,分别是《Velocity模板使用指南中文版》、《VTL语法参考指南中文版》、《Velocity Web应用开发指南中文版》和《velocity Java开发指南中文版》。以下是对这些教程...

    velocity入门使用教程

    Velocity教程.pptx 这份PPT教程可能包含了以下内容: - **实例演示**:通过具体的例子展示如何在Velocity模板中插入和操作数据。 - **最佳实践**:提供编写高效、可维护模板的建议,如避免复杂的逻辑操作,保持...

    Velocity入门教程(Spring集成Velocity)

    Velocity入门教程,语法,Velocity布局,Spring框架集成Velocity

    Velocity脚本简明教程

    ** Velocity脚本简明教程 ** Velocity是一款强大的模板引擎,它是Apache软件基金会的开源项目之一。Velocity被设计用于Web应用中的动态内容生成,但也可以应用于任何需要将数据转化为可读文本的场景,如电子邮件、...

    Velocity框架学习教程

    ### Velocity框架学习教程知识点 #### 一、Velocity框架概述 - **定义**:Velocity是一款开源的Java模板引擎,它的核心作用在于将业务逻辑与展示层相分离,使得开发者能够更加专注于各自的任务。对于Web开发而言,...

    velocity中文版教程

    ### Velocity中文版教程详解 #### 一、Velocity简介与应用场景 **Velocity** 是一款基于 Java 的模板引擎,它提供了一种简洁高效的模板语言,让用户能够轻松地引用由 Java 代码定义的对象。通过这种方式,Velocity...

Global site tag (gtag.js) - Google Analytics