Apache Velocity 是一个基于java的模板引擎(template engine)

应用场景
1.Web 应用:开发者在不使用 JSP 的情况下,可以用 Velocity 让 HTML 具有动态内容的特性
2.源代码生成:Velocity 可以被用来生成 Java 代码、SQL

语法概要
1.在 Velocity 中所有的关键字都是以#开头的,而所有的变量则是以$开头。

2.关系和逻操作符
Velocity 也具有逻辑AND, OR 和 NOT 操作符。

3.在Velocity中可以使用循环语法遍历集合,语法结构如下:

#foreach($item in $list)
$item
$velocityCount
#end

4.在Velocity中可以使用条件语法对流程进行控制

#if(condition)
...dosonmething...
#elseif(condition)
...dosomething...
#else
...dosomething...
#end

5.#include和#parse的作用都是引入本地文件, 为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。

区别:

与#include不同的是,#parse只能指定单个对象。而#include可以有多个

如果您需要引入多个文件,可以用逗号分隔就行:

#include (“one.gif”, “two.txt”, “three.htm” )

#include被引入文件的内容将不会通过模板引擎解析;而#parse引入的文件内容Velocity将解析其中的velocity语法并移交给模板,意思就是说相当与把引入的文件copy到文件中。

velocity自定义功能标签:

1.加载设置

public VelocityServiceImpl() {
VelocityEngineFactoryBean factory = new VelocityEngineFactoryBean();
Properties property = new Properties();
property.setProperty("resource.loader", "class");
property.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
property.setProperty("input.encoding", DEFAULT_ENCODING);
property.setProperty("output.encoding", DEFAULT_ENCODING);
property.setProperty(Velocity.EVENTHANDLER_REFERENCEINSERTION,
"com.sinolife.bep.common.util.VelocityReferenceHandler");
//自定义标签
property.setProperty("userdirective","com.sinolife.bep.common.util.UnTransferDirective");
factory.setVelocityProperties(property);
factory.setResourceLoader(PlatformContext.getGoalbalContext(ResourceLoader.class, ResourceLoader.class));
try {
factory.afterPropertiesSet();
} catch (Exception e) {
throw new RuntimeException("Instal LocalLoginHander Error", e);
}
velocityEngine = factory.getObject();
}

2.定义标签

/**
* 自定义不转义标签,
* 功能:velocity使用此标签输出的值不会做转义处理
* 模板使用:#unTransfer("参数1")
* 如:#unTransfer("<//123>")
* 会直接输出<//123>到页面,不做转义。
* @author zhonglihai
*
*/
public class UnTransferDirective extends Directive{
@Override
public String getName() {
return "unTransfer";//自定义指令的名称
} @Override
public int getType() {
return 2;//配置不带结束符
} @Override
  public boolean render(InternalContextAdapter context,
Writer writer, Node node) throws IOException,
ResourceNotFoundException, ParseErrorException,
MethodInvocationException {
try {
String str = node.jjtGetChild(0).value(context).toString();//第一个值
writer.write(str.toString());//输出结果
} catch (Exception e) {
return false;
}
return true;
  }
}

3.标签使用

--Velocity引用解析控制器
public class VelocityReferenceHandler implements ReferenceInsertionEventHandler { public Object referenceInsert(String key, Object value) {
if (value instanceof java.lang.String) {
value = VelocityUtils.transeChar((String) value);
}
return value;
} }
--工具类,转义字符
public class VelocityUtils { /**
* 把字符串里面的特殊字符进行转换
*
* @param str
* @return
*/
public static String transeChar(String str) {
if (StringUtils.isNotBlank(str)) {
str = str.replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&")
.replaceAll("'", "'").replaceAll("\"", """);
} return str;
}
}
--模板页面使用
<!-- 4.发送OA的单据HTML快照 5.发送OA的单据PDF快照 采用<![CDATA[ ]]> 包裹-->
#if($filterMask.operId != "2" && $filterMask.operId != "3")
#if($filterMask.operId == "4" || $filterMask.operId == "5")
<td><![CDATA[#unTransfer($!{billWorkFlowHistoryDomain.dealOpinion})]]></td>
#else
<td>#unTransfer($!{billWorkFlowHistoryDomain.dealOpinion})</td>
#end
#end

  


 

velocity 相关的更多相关文章

  1. 点我吧工作总结(技术篇) Velocity

    1. 什么是velocity Velocity[vəˈlɑ:səti],名称字面翻译为:速度.速率.迅速.该项目的开源地址:http://velocity.apache.org/,它是一个基于Java ...

  2. Velocity模板引擎入门

    类似于PHP中的Smarty,Velocity是一个基于Java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代 ...

  3. 【转载】Velocity模板引擎的介绍和基本的模板语言语法使用

    原文地址http://www.itzhai.com/the-introduction-of-the-velocity-template-engine-template-language-syntax- ...

  4. SpringMVC 学习-如何搭配使用 Velocity 页面模板

    一.快速搭建 Velocity 框架 1. 加入所需 Jar 包 <dependency> <groupId>org.apache.velocity</groupId&g ...

  5. eclipse开发velocity实例(初学)

    开发环境         Eclipse Java EE IDE for Web Developers.(Version: Helios Service Release 1) jdk1.6.0_07 ...

  6. 【转】解决高版本springboot对Velocity不支持

    https://blog.csdn.net/sinat_31270499/article/details/82283880 最近在做关于Spring Boot开发的项目,因为项目中要用到Velocit ...

  7. 项目编码规范(Ali)

    一.研发流程规范 二.SQL编码规范 数据库命名规范:数据库名一律小写,必须以字母开头.库名包含多个单词的,以下划线“_”分隔.如果采用分库方案,分库编号从“0”开始,用“0”左补齐为四位. 表名规范 ...

  8. 【solr专题之四】关于VelocityResponseWriter

    一.关于Velocity的基本配置 在Solr中,可以以多种方式返回搜索结果,如单纯的文本回复(XML.JSON.CSV等),也可以返回velocity,js等格式.而VelocityResponse ...

  9. 【solr这四个主题】大约VelocityResponseWriter

    一个.大约Velocity基本配置 在Solr在,可以以多种方式返回搜索结果,作为一个简单的文字回复(XML.JSON.CSV等待),能够返回velocity.js等格式.而VelocityRespo ...

随机推荐

  1. Tomcat启动脚本(3)setclasspath.bat

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  2. Java中HashMap与ConcurrentHashMap的区别

    从JDK1.2起,就有了HashMap,正如前一篇文章所说,HashMap不是线程安全的,因此多线程操作时需要格外小心. 在JDK1.5中,伟大的Doug Lea给我们带来了concurrent包,从 ...

  3. 在Ubuntu下安装deb包需要使用dpkg命令

    Dpkg 的普通用法: 1.sudo dpkg -i <package.deb> 安装一个 Debian 软件包,如你手动下载的文件. 2.sudo dpkg -c <package ...

  4. react 小技巧

    1.当从redux里异步获取数据时,在render里渲染dom会出现数据还未获取到的情况,这时可以用 usableSchemas.data.vertexes && usableSche ...

  5. 前端学习(十四)js回顾和定时器(笔记)

    回顾知识点:    作用域:        1.全局变量:在任何位置都可以使用的变量        2.局部变量:只能在函数内部使用的变量        3.闭包:子函数可以使用父函数的局部变量 -- ...

  6. Hadoop常用端口和定义方法

    Hadoop集群的各部分一般都会使用到多个端口,有些是daemon之间进行交互之用,有些是用于RPC访问以及HTTP访问.而随着Hadoop周边组件的增多,完全记不住哪个端口对应哪个应用,特收集记录如 ...

  7. 重视项目排期,对dateline 有所敬畏

    项目排期 = 个人任务完成 + 风险预估 + 意外情况 + 项目上下游依赖 个人任务完成 个人任务具体话 不要考虑私人情感,专注工作 风险预估 对可能出现的情况进行考虑 意外情况 对出现的意外情况提前 ...

  8. MySQL常用操作2

    MySQL常用操作2 判断函数 IF(expr, value1, value2)  --  如果表达式expr为true,则返回value1,否则返回value2 IFNULL(value1, val ...

  9. 每天一个Linux命令:pwd(3)

    pwd pwd是Print Working Directory的缩写,其功能是显示当前所在工作目录的全路径.主要用在当不确定当前所在位置时,通过pwd来查看当前目录的绝对路径 格式 pwd [选项] ...

  10. 远程仓库 GitHub

    远程仓库 这里介绍的远程仓库指的是 GitHub, 在这个网站,所有非私有的的代码,都可以被其他人查看,所以,一些机密或者重要的文件千万不要上传到这里面,如果需要可以购买付费版本或自己公司搭建埃及的远 ...