Velocity使用方法简介

  以前用winforms写模板生成,现在没必要了,有了Velocity(以下简称V),就可以写出web的模板生成了。

使用很简单,下载了之后,引用dll,我这里写了一个通用的类

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;
using  System.Collections;

using  NVelocity;
using  NVelocity.App;
using  NVelocity;
using  NVelocity.Runtime;
using  Commons.Collections;
using  System.IO;
using  NVelocity.Context;
///   <summary>
///  BaseVelocity 的摘要说明
///   </summary>
public   class  BaseVelocity
{

    
///   <summary>
    
///  Common
    
///   </summary>
    
///   <param name="tempAbsPath"> 模板路径 </param>
    
///   <param name="outAbsPath"> 输出绝对路径 </param>
    
///   <param name="parameters"> 初始参数 </param>
    
///   <param name="tempEncoding"> 模板编码[options] </param>
    
///   <param name="outEncoding"> 输出编码[optioins] </param>
    
///   <param name="returnStr"></param>
    
///   <returns></returns>
     private   string  create( string  tempAbsPath,  string  outAbsPath,Hashtable parameters, string  tempEncoding,  string  outEncoding, bool  returnStr)
    {
        
if  (tempAbsPath  ==   "" ) {  throw   new  ArgumentException( " 模板参数错误 " ); }
        
if  (outAbsPath  ==   "" ) {  throw   new  ArgumentException( " 输出参数错误 " );  }
        
if  (tempEncoding  ==   "" ) tempEncoding  =   " utf-8 " ;
        
if  (outEncoding  ==   "" ) outEncoding  =   " utf-8 " ;


        
// 创建NVelocity引擎的实例对象
        VelocityEngine velocity  =   new  VelocityEngine();

        
// 初始化该实例对象
         string  root  =  tempAbsPath.Substring( 0 , tempAbsPath.LastIndexOf( " \\ " +   1 );
        
string  fileName  =  tempAbsPath.Substring(tempAbsPath.LastIndexOf( " \\ " +   1 );
        ExtendedProperties props 
=   new  ExtendedProperties();
        props.AddProperty(RuntimeConstants.RESOURCE_LOADER, 
" file " );
        props.AddProperty(RuntimeConstants.INPUT_ENCODING, tempEncoding);
        props.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, root);
        props.AddProperty(RuntimeConstants.OUTPUT_ENCODING, outEncoding);
        velocity.Init(props); 

        
// 从文件中读取模板
        NVelocity.Template temp  =  velocity.GetTemplate(fileName);        
        IContext context 
=   new  VelocityContext();
        
if  (parameters  !=   null )
        {
            
foreach  ( string  key  in  parameters.Keys)
            {
                context.Put(key, parameters[key]);
            }
        }      
     
        
// 合并模板
        StringWriter writer  =   new  StringWriter();

        
// velocity.MergeTemplate(context, writer);
        temp.Merge(context, writer);

        
// 生成静态页
         if  ( ! returnStr)
        {
            
using  (StreamWriter writer2  =   new  StreamWriter(outAbsPath,  false , System.Text.Encoding.GetEncoding(outEncoding),  200 ))
            {
                writer2.Write(writer);
                writer2.Flush();
                writer2.Close();
            }
        }
        
else
            
return  writer.ToString();
        
return   null ;
    }
    
///   <summary>
    
///  创建静态文件
    
///   </summary>
    
///   <param name="tempAbsPath"> 模板绝对路径 </param>
    
///   <param name="outAbsPath"> 输出绝对路径 </param>
    
///   <param name="parameters"> 初始参数 </param>
    
///   <param name="tempEncoding"> 模板编码[options] </param>
    
///   <param name="outEncoding"> 输出编码[optioins] </param>
    
///   <param name="returnStr"></param>
    
///   <returns></returns>
     public   void  creatFile( string  tempAbsPath,  string  outAbsPath, Hashtable parameters,  string  tempEncoding,  string  outEncoding)
    {
        create(tempAbsPath,outAbsPath,parameters,tempEncoding,outEncoding,
false );
    }
    
///   <summary>
    
///  创建输出字符串
    
///   </summary>
    
///   <param name="tempAbsPath"> 模板绝对路径 </param>
    
///   <param name="outAbsPath"> 输出绝对路径 </param>
    
///   <param name="parameters"> 初始参数 </param>
    
///   <param name="tempEncoding"> 模板编码[options] </param>
    
///   <param name="outEncoding"> 输出编码[optioins] </param>
    
///   <param name="returnStr"></param>
    
///   <returns></returns>
     public   string  createStr( string  tempAbsPath,  string  outAbsPath, Hashtable parameters,  string  tempEncoding,  string  outEncoding)
    {
        
return  create(tempAbsPath, outAbsPath, parameters, tempEncoding, outEncoding,  true );
    }
}

 

这种是通过文件加载模板的

以下可以通过变量加载模板

关键代码:

 

System.Text.StringBuilder builder  =   new  System.Text.StringBuilder();
        builder.Append(
" #foreach($u in $ListUsers) " r " n "   +
            
" #beforeall " r " n "   +
            
" <table border= "" 0 ""  cellpadding= "" 10 ""  cellspacing= "" 10 "" > "   +
            
" <tr><td>Name</td><td>Sex</td><td>City</td></tr> "   +
            
" #each " r " n "   +
            
" <tr> "   +
            
" <td>$u.Name</td> "   +
            
" <td>$u.Sex</td> "   +
            
" <td>$u.City</td> "   +
            
" </tr> "   +
            
" #afterall " r " n "   +
            
" </table> "   +
            
" #nodata " r " n "   +
            
" 暂无用户资料 " r " n "   +
            
" #end " );

        VelocityEngine vltEngine 
=   new  VelocityEngine();
        vltEngine.Init();

        VelocityContext vltContext 
=   new  VelocityContext();
        vltContext.Put(
" PageTitle " " 字符串模板例子 " );
        vltContext.Put(
" ListUsers " , listUsers);

        System.IO.StringWriter vltWriter 
=   new  System.IO.StringWriter();
        vltEngine.Evaluate(vltContext, vltWriter, 
null , builder.ToString());

        Response.Write(vltWriter.GetStringBuilder().ToString());

 

 

转载于:https://www.cnblogs.com/IT-Cristian/archive/2010/02/02/1661728.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值