NVelocity系列:Getting Start With NVelocity

NVelocity是java velocity的c#实现,目前我在CodePlex维护着与velocity同步的版本。NVelocity也在项目中使用着,在社区也有国外开发者的一些反馈。

 下面是一个在Asp.Net如何使用NVelocity的非常简单例子:

 定义HttpHandler:

ContractedBlock.gif ExpandedBlockStart.gif Code
 1namespace NVelocity.TestWebsite
 2ExpandedBlockStart.gifContractedBlock.gif{
 3    using System;
 4    using System.Collections.Generic;
 5    using System.IO;
 6    using System.Web;
 7
 8    using Commons.Collections;
 9
10    using NVelocity.App;
11    using NVelocity.Context;
12    using NVelocity.Runtime;
13
14ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
15    /// 
16    /// </summary>

17    public class NVelocityHandler : IHttpHandler
18ExpandedSubBlockStart.gifContractedSubBlock.gif    {
19ContractedSubBlock.gifExpandedSubBlockStart.gif        IHttpHandler Members#region IHttpHandler Members
20
21        public bool IsReusable
22ExpandedSubBlockStart.gifContractedSubBlock.gif        {
23ExpandedSubBlockStart.gifContractedSubBlock.gif            get return false; }
24        }

25
26        public void ProcessRequest(HttpContext context)
27ExpandedSubBlockStart.gifContractedSubBlock.gif        {
28            VelocityEngine velocity = new VelocityEngine();
29
30            ExtendedProperties props = new ExtendedProperties();
31
32            //定义模板路径
33            props.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Views"));
34
35            //初始化
36            velocity.Init(props);
37
38            List<City> list = new List<City>();
39
40ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new City() { Name = "sh", Id = 21 });
41ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new City() { Name = "bj", Id = 22 });
42ExpandedSubBlockStart.gifContractedSubBlock.gif            list.Add(new City() { Name = "tj", Id = 23 });
43
44
45            IContext c = new VelocityContext();
46
47            //添加到上下文中
48            c.Put("cities", list);
49
50            //根据请求输出
51            velocity.MergeTemplate(context.Request.QueryString["vm"+ ".vm""UTF-8", c, context.Response.Output);
52        }

53
54        #endregion

55    }

56
57ExpandedSubBlockStart.gifContractedSubBlock.gif    /**//// <summary>
58    /// 城市
59    /// </summary>

60    public class City
61ExpandedSubBlockStart.gifContractedSubBlock.gif    {
62ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
63        /// ID
64        /// </summary>

65ExpandedSubBlockStart.gifContractedSubBlock.gif        public int Id getset; }
66
67ExpandedSubBlockStart.gifContractedSubBlock.gif        /**//// <summary>
68        /// 名称
69        /// </summary>

70ExpandedSubBlockStart.gifContractedSubBlock.gif        public string Name getset; }
71    }

72}

73

 一个用于测试的default.vm模板文件:

ContractedBlock.gif ExpandedBlockStart.gif Code
1##循环输出
2#foreach($city in $cities)
3Id:$city.id<br />
4城市名称:$city.name<br />
5#end
6##索引获取数据
7$cities.get_item(2).name
8

 在Web.config中配置上面定义的HttpHandler:

ContractedBlock.gif ExpandedBlockStart.gif Code
<httpHandlers>
            
<add verb="*" path="*.page" type="NVelocity.TestWebsite.NVelocityHandler,NVelocity.TestWebsite"/>
        
</httpHandlers>

 请求及输出效果:

 

转载于:https://www.cnblogs.com/TerryLiang/archive/2009/03/21/1418157.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值