https://blog.csdn.net/icannotdebug/article/details/79725297
1、簡介
Velocity 是一個基於 Java 的模板引擎框架,提供的模板語言可使用在 Java 中定義的對象和變量上說白了就相似於jsp,java中定義對應的對象,模板載入後,能夠對象信息動態加載入模板
java
2、使用方式
一、引入pom(老生常談)apache
<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity-engine-core</artifactId> <version>2.0</version> </dependency>
二、建立模板文件(Hellovelocity.vm)框架
#set( $iAmVariable = "good!" ) Welcome $name to velocity.com today is $date. #foreach ($i in $list) $i #end $iAmVariable
三、編寫測試mainjsp
import org.apache.velocity.Template; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.runtime.RuntimeConstants; import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader; import java.io.StringWriter; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @author: <a href="mailto:wb-lzl282164@alibaba-inc.com">李智龍</a> * @date: 2018/3/28 */ public class HelloVelocity { public static void main(String[] args) { VelocityEngine ve = new VelocityEngine(); ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath"); ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName()); ve.init(); // 載入(獲取)模板對象 Template t = ve.getTemplate("hellovelocity.vm"); VelocityContext ctx = new VelocityContext(); // 域對象加入參數值 ctx.put("name", "李智龍"); ctx.put("date", (new Date()).toString()); // list集合 List temp = new ArrayList(); temp.add("1"); temp.add("2"); ctx.put("list", temp); StringWriter sw = new StringWriter(); t.merge(ctx, sw); System.out.println(sw.toString()); } }
四、打印結果maven
Welcome 李智龍 to velocity.com today is Wed Mar 28 11:03:04 CST 2018. 1 2 good!
3、使用模板的目的
若是說使用模板生成java代碼,或者開發對應的代碼,目前有不少封裝好的更好用的開源框架,
使用Velocity本身編寫一個適用的框架也是能夠的(很蛋疼吧)。不過我的以爲Velocity最好的使用場景,是在文件模板的生成方面,如今有不少場景須要打印報表,
生成對應的文件,而Velocity即是一個過渡的比較好用的輕量的插件。後面也會提供相應的例子
Velocity模板引擎實戰:動態生成HTML、Word、Excel等報表函數
4、模板的基本語法
一、定義變量測試
#set($name =「Jackie」) #set($hello =「hello $name」) Jackie賦值給$name,此時$hello的值爲hello Jackie
二、變量使用spa
模板文件可使用name或.net
{name}定義變量,建議使用後者,name和
names 的兩個變量,若是不選用大括號的話,引擎就沒有辦法正確識別$names 這個變量。
三、循環
#foreach($element in $list) This is $element $velocityCount #end
四、條件語句
#if(condition) ... #elseif(condition) … #else … #end
五、關係操做符
AND、OR 和 NOT 操做符,分別對應&&、||和!
六、函數
#macro(macroName arg1 arg2 …) ... #end // 對應函數 #macroName(arg1 arg2 …)
示例
#macro(sayHello $name) hello $name #end #sayHello(「velocity」)
七、解析和引入模板
temp.vm 文件:
#set($name =「velocity」)
parse.vm:
#parse(「temp.vm」) 輸出結果爲:velocity
include.vm:
#include(「temp.vm」) 輸出結果爲:#set($name =「velocity」)