Nvelocity使用方法

   context.Response.ContentType = "text/html";
                VelocityEngine vltEngine = new VelocityEngine(); //实例化模板
                vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file"); //文件系统
                vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/ModelEngine"));
              //模板文件所在的文件夹
                VelocityContext vltContext = new VelocityContext();
                Template vltTemplate = vltEngine.GetTemplate("login.html"); //获取模板,将一个HTML文档作为模板,
                //前面设置完成之后,经过下面的处理,得到最终的HTML页面
                vltContext.Put("username", ""); //设置页面参数,也就是那些加上了$符号的值 
                vltContext.Put("password", "");  //这里把这些值都设置成了空


                System.IO.StringWriter vltWriter = new System.IO.StringWriter();
                vltTemplate.Merge(vltContext, vltWriter);


                string html = vltWriter.GetStringBuilder().ToString(); //得到最终页面的HTML代码


                context.Response.Write(html); //输出

上面就是一个Nvelocity最基本的使用方法了 

    还可以使用诸如:     

    假定有这个类 : 

class person
{
    public string name{get;set;}
   public string addr {get;set;}
}

    --------省略前面的代码

 vltContext.Put("person", new person{name="moersing",addr="china"}); //将整个类传递到页面模板中,在页面模板使用  &perosn.name 来获取这个值即可。
 
 
 

     本人也是新手啦,上面是参照某老师视频给出的(在此,本人衷心感谢,为了避免别人说我是在打广告,这里就不说是哪位了),但是不知道为什么,nvelocity1.6.1bate2 这个版本貌似是不支持集合索引的,也就是说,诸如:table.rows, Dictionary,等在HTML页面无法使用 $array.attributeName访问的,nvelocity会报错,什么无法转换之类的。

注:$array不是一个Nvelocity中的对象,这里只是一个占位符,表示一个集合,attributeName表示该集合中的属性名。

例如:1.6.1版本

Dictionary <string,string> test = new Dictionary <string,string>();
test["name"]= "moersing"; //设置key和value值
vltContext.Put("person",test); //传递整个字典

 在页面中的引用 

<!--省略前面的代码-->
 <body>
   $test.name  <!--引用key值-->
</body>
但是报错了,提示无法转换,我整了半天也不知道怎么回事,然后根据某老师说的,换成1.1.1的nvelocity,同样是这段代码,却报错了。在getTemplate这个方法出错,提示对象为null,也就是getTemplate这个方法无法获得HTML模板,文件夹路径和名称也是对的(那是肯定的,在1.6.1能使用这个路径,当然没错)。

解决办法:  

   

context.Response.ContentType = "text/html";
 Dictionary<string, string> test = new Dictionary<string, string>();//实例化字典
            test["name"] = "moersing"; 
            VelocityEngine engine = new VelocityEngine();
            ExtendedProperties prop = new ExtendedProperties();
            prop.AddProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.HttpContext.Current.Server.MapPath("./")); //路径开始是./
            prop.AddProperty(RuntimeConstants.ENCODING_DEFAULT, "utf-8");
            engine.Init(prop);
            Template vltTemplate = engine.GetTemplate("HTMLPage1.htm"); //获取模板
            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("test", test); //设置页面参数,也就是那些加上了$符号的值   
            StringWriter vltWriter = new StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);
            string html = vltWriter.GetStringBuilder().ToString(); //得到最终页面的HTML代码  
            context.Response.Write(html); //输出  


 
 这样就没有问题了,仔细看看上面的代码和前面的代码是不一样的,原理是什么,咱也不清楚,呵呵,哪位大师如果知道,请赐教,另外,我测试了一下,这种写法也支持1.6.1beat版本的(   o(≧v≦)o~~好棒   luky  ) 

 另外,

            vltTemplate.Merge(vltContext, vltWriter);
            string html = vltWriter.GetStringBuilder().ToString(); //得到最终页面的HTML代码  
            context.Response.Write(html); //输出  
 如果只是响应客户端请求输出最终页面的话,也可以简化成  
vltTemplate.Merge(vltContext,context.Response.output); //这样就直接在页面输出了!
但是考虑到封装的思想,可以封装成一个方法,这样就无法简化了,

            vltTemplate.Merge(vltContext, vltWriter);
            string html = vltWriter.GetStringBuilder().ToString(); //得到最终页面的HTML代码  
            return html ; //返回一个HTML。

本人也是菜鸟,这些都是靠自己摸索出来的,但毕竟还是原创,不喜勿喷。 -----------凌轩阁℡墨轩™ 

如果上面的代码有什么问题,欢迎加本人QQ:1261870167     请各位赐教,万分感激。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值