首页 > 代码库 > 只需一句话就能搞定NVelocity模板引擎,源码+解析+文档+资料+注释

只需一句话就能搞定NVelocity模板引擎,源码+解析+文档+资料+注释

 好长时间不发技术方面的动态了,今天无聊就发篇关于NVelocity的技术文章吧,这门技术来源于java开源项目Velocity,比较好用,其他的我也不过多介绍了,没听过的在文章末尾会有介绍,下面我们就实战吧~

        咱们直接上最简单的方法,一句话搞定:

 DNTNvelocityHelper.NvelocityTemplate(context.Request.MapPath("~/NVelocity/templates/"), context, "Templater_index.dnt", "utf-8",dic);

 
         很多人就蛋疼了,你这没头没脑的一句话搞毛呢?不急,咱们先重基础的了解开始,那个只是最后最简单状态.

        说到NVelocity,那么官网先贴出来:http://www.castleproject.org/download/ ;这个NVelocity有什么用呢,为啥用他呢?

        其实让我说这个比较蛋疼,你只要记住2点就行了:其一:前台和后台工作分离 。其二:不用你手动读取字符串去进行繁琐的替换。

        可能有人会问,不是有母板页吗?感觉差不多啊?咳,你可以从单词来理解Velocity是速度的意思,如果效率一样那还有人用吗。。。事实证明他们也不是一个档次的。如果你会了这个技术那么你的简历里面可以很洋气的写上~

        其实模板引擎有很多NVelocity、Razor、StringTemplate等,NVelocity只是其中之一,来源于Velocity。这些模板引擎用起来也都相似,一般Net程序员刚接触的模板引擎都是它,如果用过java的会发现,这个玩意的写法和EL表达式有几分神似。 

        好了,我就不继续扯淡了,参考资料和笔记我都会贴下面的,我们下面步入正轨~ 

1.新建一个网站添加对NVelocity.dll的引用
下载地址:http://pan.baidu.com/s/1qWwkHzu 

 

2.新建 一个模板页面,我的如下图:(后缀名随便,建议先改成html,写完后再改成你的后缀)

咱们先看下NVelocity的语法 

 

—————————————————我的模板页——————————————— 
先简单解析一下:
     $title相对于声明了一个变量叫title,我们在后台会给他赋值的,打个比方把就像C#里面的string title;后台一赋值就可以显示出来了,这个跟服务器控件lable有点神似(两者本质是不同的)

     #if($p.Age < 10) #else #end ;这个是个语法格式,就相对于if else,只不过多了个end表示结束【注意:大于号,小于号中间的空格。】

    $p.Age不知道什么意思吗?这就是NVelocity的强大之处,这里的$p 表示一个类,C#面向对象中类里面有字段属性,这边同样适用
—————————————————————————————————————— 
<!DOCTYPE html>
 
<html xmlns="http://www.w3.org/1999/xhtml">
 
<head>
 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>$title</title>  
    
</head>
 
<body>
 
    #if($p.Age < 10)
    
            <span style="color: blue">$p.Name</span>
            
    #else
    
            <span style="color: red">$p.Name</span>
            
    #end 
    
    <br />
    
    年龄: $p.Age
    
    <br />
    
    性别:$p.Gender
    
    <br />
    
    邮箱:$p.Email
    
</body>
 
</html> 

————————————————————————————————————————

 3.新建一个一般处理程序

代码贴下:
(注释什么的都帮你打好了,如果你感觉还是不太懂就直接看第5步,我会教你用一句话搞定他) 
 
<%@ WebHandler Language="C#" Class="OneNVelocity" %>
 
using System;
 
using System.Web;
 
using NVelocity;
 
using NVelocity.App;
 
using NVelocity.Runtime;
 
public class OneNVelocity : IHttpHandler
{
 
    public void ProcessRequest(HttpContext context)
    {
        //这个类型记得得改一下
        
        context.Response.ContentType = "text/html";
        
        //一、创建模板引擎
        
        //  1.初始化模板引擎
        
        VelocityEngine vEngine = new VelocityEngine();
 
        //  2.设置模板引擎的初始化属性~//设置模板殷勤默认的模板所在的根路径
        
        vEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, context.Request.MapPath("~/NVelocity/templates/"));
        
        //  3.初始化模板模板引擎
        
        vEngine.Init();
        
        //二、设置模板中使用的数据
        
        //  将需要在模板中使用的数据都加到VelocityContext上下文对象中。
        
        //  1.创建一个VelocityContext上下文对象
        
        VelocityContext vContext = new VelocityContext();
        
        //  2.向context对象中设置数据
        
        vContext.Put("title", "这是我的第一个模板引擎页面");
        
        Person p = new Person() { Name = "甲", Age = 16, Email = "jia@163.com", Gender = "女" };
        
        vContext.Put("p", p);
        
        //    vContext.Put("page_content", p);
        
        //三、合并模板引擎要加载的模板文件与VelocityContext对象
        
        //  合并完毕后,模板引擎内部就会对模板与数据进行整合执行,并生成新的内容
        
        using (System.IO.StringWriter strWriter = new System.IO.StringWriter())
        {
            
            vEngine.MergeTemplate("Templater_index.dnt", "utf-8", vContext, strWriter);
            
            //四、把生成好的新字符串响应给用户
            
            context.Response.Write(strWriter);
            
        }       
        
    }
 
    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
 
}
 
 4.浏览OneNVelocity.ashx看效果~(不是浏览模板页【模板的功能只是母体而已】)
 
————————————————————————————————————————————
 
5.如果你嫌烦或者还不懂的话就看这一步
        咱们每次渲染个页面都写这么多代码不是很蛋疼吗?不知道你们怎么想的,逆天从初二数学老师那学到一个好习惯~那就是偷懒,能简单搞那么烦不是脑抽吗?于是就封装了个NVelocityHelper,你只要传几个参数就可以简单的实现这个模板引擎的效果。

        我们来说下参数:
                         templatePath 模板文件夹的绝对路径;设置默认的模板所在的根路径 
                        context HttpContext,一般处理程序的context对象
                        fileName 模板文件名+后缀 
                        encoding 编码格式 eg:utf-8 
                        dntDic Dictionary,把页面要替换的 $变量 当键 
        那到底怎么写呢?看:
        分三步来写:
            1.跟上面一样,首先得把一般处理程序的ContentType改成text/html
context.Response.ContentType = "text/html";        //意思就是你发的内容是以html的格式来解析的 
 
             2.创建一个价值对,并为他赋值
         Dictionary<string, object> dic = new Dictionary<string, object>();
 
 
 
         dic.Add("title", "这是我的第一个模板引擎页面");
         Person p = new Person() { Name = "逆天", Age = 18, Email = "1054186320@qq.com", Gender = "保密" };  dic.Add("p", p);  
 
 
 

             3.调用NVelocity模板引擎
DNTNvelocityHelper.NvelocityTemplate(context.Request.MapPath("~/NVelocity/templates/"), context, "Templater_index.dnt", "utf-8",dic);
         搞定了~
—————————————————————————————————————————— 
效果图
 
如果你很好奇我怎么写的话可以在下面下载源码,我这边简单贴一下
 
using NVelocity;
 
using NVelocity.App;
 
using NVelocity.Runtime;
 
using System;
 
using System.Collections.Generic;
 
using System.Linq;
 
using System.Web;
 
/// <summary>
/// MyNvelocity 的摘要说明
/// </summary>
public static class DNTNvelocityHelper
{
    /// <summary>
    
    /// 逆天自己为了偷懒而写的NVelocityHelper类,注释什么的我都写全了,如有Bug处还望海涵~
    
    /// </summary>
    
    /// <param name="templatePath">模板文件夹的绝对路径;设置默认的模板所在的根路径</param>
    
    /// <param name="context">HttpContext</param>
    
    /// <param name="fileName">模板文件名+后缀</param>
    
    /// <param name="encoding">编码格式 eg:utf-8</param>
    
    /// <param name="dntDic">Dictionary,把页面要替换的 $变量 当键</param>
    
    public static void NvelocityTemplate(string templatePath, HttpContext context, string fileName, string encoding, Dictionary<string, object> dntDic)
    {
        //一、创建模板引擎
        
        //  1.初始化模板引擎
        
        VelocityEngine vEngine = new VelocityEngine();
 
        //  2.设置模板引擎的初始化属性~设置默认的模板所在的根路径
        
        vEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, templatePath);
 
        //  3.初始化模板模板引擎
        
        vEngine.Init();
 
        //二、设置模板中使用的数据
        
        //  将需要在模板中使用的数据都加到VelocityContext上下文对象中。
        
        //  1.创建一个VelocityContext上下文对象
        
        VelocityContext vContext = new VelocityContext();
 
        //  2.向context对象中设置数据
        
        foreach (KeyValuePair<string, object> item in dntDic)
        {
            vContext.Put(item.Key, item.Value);
        }
 
        //    vContext.Put("page_content", p);
        
        //三、合并模板引擎要加载的模板文件与VelocityContext对象
        
        //  合并完毕后,模板引擎内部就会对模板与数据进行整合执行,并生成新的内容
        
        using (System.IO.StringWriter strWriter = new System.IO.StringWriter())
        {
            
            vEngine.MergeTemplate(fileName, encoding, vContext, strWriter);
            
            //四、把生成好的新字符串响应给用户
            
            context.Response.Write(strWriter);
            
        }
    }
}
 
—————————————————————————————————————————— 
 
资料集合:http://pan.baidu.com/s/1dDitZ0l 
参考源码:http://pan.baidu.com/s/1dDB0pJb 
NVelocity.dll:http://pan.baidu.com/s/1qWwkHzu 
官网:http://www.castleproject.org/download/
 

只需一句话就能搞定NVelocity模板引擎,源码+解析+文档+资料+注释