Velocity使用说明

官网:http://velocity.apache.org

1   Velocity 是什么?

       Velocity是一个基于Java的模板引擎

2  用途

       Velocity将Java代码与网页分开,使网站在其生命周期内更加可维护,并为Java Server Pages(JSP)或PHP提供了可行的替代方案。

3  应用场景

    ①当Velocity用于Web开发时,Web设计人员可以与Java程序员并行工作,以根据模型 - 视图 - 控制器(MVC)模型开发Web站点,这意味着网页设计人员可以专注于创建一个看起来很好的站点,程序员可以专注于编写一流的代码

    ②它可以用于从模板生成SQL,PostScript和XML。它可以用作生成源代码和报告的独立实用程序,也可以用作其他系统的集成组件。例如,Velocity为各种Web框架提供模板服务,使他们能够根据真正的MVC模型,使视图引擎促进Web应用程序的开发。

4  使用说明  

    第一步:引入velocity-1.7 和 velocity-1.7-dep jar包

    第二步:声明一个bean 作用是用来填充数据

    第三步:调用

//  填充工具操作

public class TemplateTool {
	public static String fill(VelocityContext context, String tmdir, String tmFile){
	    String result = "";
	    try {
	      Properties p = new Properties();
	      p.setProperty("file.resource.loader.path", tmdir);
	      
	      // 引擎
	      VelocityEngine ve = new VelocityEngine();
	      ve.init(p);
	      
	      //模板
	      Template t = ve.getTemplate(tmFile);
	      // 将输入写入模板中
	      StringWriter writer = new StringWriter();
	      t.merge(context, writer);
	      result = writer.toString();
	      writer.close();
	    } catch (Exception e) {
	      e.printStackTrace();
	    }
	    return result;
	  }
	 
	  public static String fill(VelocityContext context, String tmdir, String tmFile, String inputEncode, String ouputEncode){
	    String result = "";
	    try {
	      Properties p = new Properties();
	 
	      p.setProperty("file.resource.loader.path", tmdir);
	      p.setProperty("ISO-8859-1", "UTF-8");
	 
	      p.setProperty("input.encoding", inputEncode);
	 
	      p.setProperty("output.encoding", ouputEncode);
	 
	      VelocityEngine ve = new VelocityEngine();
	      ve.init(p);
	      Template t = ve.getTemplate(tmFile);
	      StringWriter writer = new StringWriter();
	 
	      t.merge(context, writer);
	      result = writer.toString();
	      writer.close();
	    } catch (Exception e) {
	      e.printStackTrace();
	    }
	    return result;
	  }
	 
	  public static String fill(VelocityContext context, String templateString){
	    String result = "";
	    try {
	      VelocityEngine ve = new VelocityEngine();
	      ve.init();
	      StringWriter writer = new StringWriter();
	      StringReader reader = new StringReader(templateString);
	      ve.evaluate(context, writer, "temp", reader);
	      result = writer.toString();
	    } catch (Exception e) {
	      e.printStackTrace();
	    }
	    return result;
	  }
	 
	  public static String test(int i){
	    return "array:" + i;
	  }
	  private  String getCancelRequestMsg(CancelRequestDTO request) {
			// 定义局部变量
			String templatePath = "/template/cancel";        // 报文模板路径
			String templateFileName = "cancel_hesitation_request.xml";  // 报文模板文件名
			String requestXml = "";
			
			// 构建请求报文,并转换成报文字符串
			VelocityContext context = new VelocityContext();
			context.put("seatDept", request.getSeatDept());
			context.put("seatCode", request.getSeatCode());
			context.put("insu", request.getInsu());
			context.put("subject", request.getSubject());
			/*context.put("traDate", DateUtils.dateToString("yyyyMMdd", request.getTraDate()));*/
			
			context.put("trans", request.getTrans());
			context.put("policyNo", request.getPolicyNo());		
			context.put("serviceId", request.getServiceId());
//			context.put("productNum", request.getProductNum().get(0));
//			context.put("withdrawMoney", request.getWithdrawMoney().get(0));
			templatePath = System.getProperty("user.dir")+"/WebContent"+templatePath;
			requestXml = TemplateTool2.fill(context, templatePath, templateFileName, "GBK", "GBK");
//			requestXml = TemplateTool.fill(context, this.getClass().getResource(templatePath).getPath(), templateFileName, "GBK", "GBK");
//			requestXml = TemplateTool.fill(context, templatePath, templateFileName, "GBK", "GBK");

//			LogTool.inf(this.getClass(), "getCancelRequest is: " + requestXml);
//			if (requestXml == null || "".equals(requestXml)) {
//				errorLogTool.addErrorLog("填充模板出错,模板路径:" + templatePath
//						+ templateFileName, ConstantTool.ErrorTemplateFill);
//				return null;
//			}
			System.out.println(requestXml);
			
			// 返回报文字符串
			return requestXml;
		}
		public static void main(String[] args) {
			ArrayList productNumList = new ArrayList();
			productNumList.add("ProductNum1");
			productNumList.add("ProductNum2");
			productNumList.add("ProductNum3");
			ArrayList withdrawMoneyList = new ArrayList();
			withdrawMoneyList.add("withdrawMoney1");
			withdrawMoneyList.add("withdrawMoney2");
			withdrawMoneyList.add("withdrawMoney3");
			CancelRequestDTO cancelRequestDTO = new CancelRequestDTO();
			cancelRequestDTO.setSeatDept("SeatDept1");
			cancelRequestDTO.setSeatCode("SeatCode1");
			cancelRequestDTO.setInsu("insu1");
			cancelRequestDTO.setSubject("subject1");
			cancelRequestDTO.setTrans("Trans1");
			cancelRequestDTO.setPolicyNo("policyNo1");
			cancelRequestDTO.setServiceId("ServiceId1");
//			cancelRequestDTO.setProductNum(productNumList);
//			cancelRequestDTO.setWithdrawMoney(withdrawMoneyList);
			TemplateTool2 templateTool = new TemplateTool2();
			templateTool.getCancelRequestMsg(cancelRequestDTO);
	
		}

}
实体类
public class CancelRequestDTO {
	private String seatDept;
	private String seatCode;
	private String insu;
	private String subject;
	/*private Date traDate;*/
	private String trans;
	/*private Date validateTime;*/
	private String policyNo;
	private String serviceId;
	/*private List productNum;
	private List withdrawMoney;*/
	private ArrayList> list;
}


	
		${seatDept}
		${seatCode}
		${insu}
	
	
         11
		${subject}
		
		${trans} 
		
		    
			$!{policyNo}
			11
			$serviceId
		        
					#foreach($item in $jobs)
 					   
			             $item.get("productNum")
						 $item.get("withdrawMoney")
			           
					#end 

			    
		
	

5    语法说明  

① 变量
#set($!{name} = "velocity") 
#set($!{foo} = $bar) 

#set($foo =“hello”) 

#set($foo.name = $bar.name) 
#set($foo.name = $bar.getName($arg))

 #set($foo = 123)
 #set($foo = [“foo”,$bar])

#set($greet = 'hello')
#set($名字=“”)
#set($!{}名字=“”)
面代码中 $!{}的写法,使用$vari获取变量时,如果变量不存在,Velocity引擎会将其原样输出
通过使用$!{}的形式可以将不存在的变量变成空白输出.

 

② 循环
#foreach($item in $list)
 
 $item
 $velocityCount
#end
$item代表遍历的每一项,
velocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值

 

③条件控制语法
使用条件语法对流程进行控制

④宏
在Velocity中也有宏的概念,可以将其作为函数来理解

⑤parse和include指令   (可以和jsp的动静态包含联系在一起)
在Velocity中可以通过parse或者include指令引入外部vm文件,
但是二者存在区别:include指令会将外部文件原样输出,
而parse指令会先对其进行解析再输出(即对外部文件中的vm语法解析)

 

6  使用特殊情况

  ①  当变量没有值时候,不输出

  ②  语法不在意文件格式,可以在任意格式文件输出

  ③  list中放置map ,并且map循环展示取值

  ④TemplateTool.fill  在填充时候的模板路径是个难点,要注意下

ArrayList> list = new ArrayList>();
Map hashMap = new HashMap();
Map hashMap2 = new HashMap();
hashMap.put("productNum","productNum1");
hashMap.put("withdrawMoney","withdrawMoney1");
hashMap2.put("productNum","productNum2");
hashMap2.put("withdrawMoney","withdrawMoney2");
list.add(hashMap);
list.add(hashMap2);




	#foreach($item in $jobs)
 		
			 $item.get("productNum")
		     $item.get("withdrawMoney")
		
	#end 

 

你可能感兴趣的:(Velocity使用说明)