Nvelocity举例

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>登录</title>
</head>
<body>
<form action="../login.ashx">
用户名:<input type="text" name="username" value="$username" /><br />
密&nbsp;&nbsp;&nbsp; 码:<input type="text" name="password"  value="$password" /><br />
<input type="hidden" name="ispostback" value="true" />
<input type="submit" value="提交"/>
<p>$msg</p>
</form>
</body>
</html> 
  public class Person
    {
        public string Name { set;get;}
        public int Age { set; get; }
        public Person Father { set; get; }
    }

把需要做的模板字段用$标示,还要声明一个person类

先把类型改为“text/html”解析html

  public class login2 : IHttpHandler
    {

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/html";
            Person person = new Person();
            person.Name = "yzk";
            person.Age = 30;
            Person dad = new Person();
            dad.Name = "ff";
            dad.Age = 60;
            //把father指向一个dad;
            person.Father = dad;

            VelocityEngine vltEngine = new VelocityEngine();//实例化一个velocity模版引擎
            vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
            vltEngine.Init();

            VelocityContext vltContext = new VelocityContext();
            vltContext.Put("p",person);//设置参数,在模板中可以通过$data来引用
            //把person对象作为传入p

            Template vltTemplate = vltEngine.GetTemplate("test.htm");
            System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            vltTemplate.Merge(vltContext, vltWriter);

            string html = vltWriter.GetStringBuilder().ToString();//得到html这个模板
            context.Response.Write(html);

            //context.Response.Write("Hello World");
            //string username=context.Request ["username"];
            //string password=context .Request ["password"];
            //if (string.IsNullOrEmpty (username)&&string.IsNullOrEmpty (password ))
            //{

            //VelocityEngine vltEngine = new VelocityEngine();//实例化一个velocity模版引擎
            //vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            //vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
            //vltEngine.Init();

            //VelocityContext vltContext = new VelocityContext();
            //    vltContext.Put("username", "");//设置参数,在模板中可以通过$data来引用
            //    vltContext.Put("password", "");
            //    vltContext.Put("msg", "");
            //    Template vltTemplate = vltEngine.GetTemplate("login.htm");
            //System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            //vltTemplate.Merge(vltContext, vltWriter);

            //string html = vltWriter.GetStringBuilder().ToString();//得到html这个模板
            //context.Response.Write(html);

            //}
            //else
            //{
            //    if (username=="admin"&&password=="123")
            //    {
            //        context.Response.Write("登陆成功");
            //    }
            //    else
            //    {
            //        VelocityEngine vltEngine = new VelocityEngine();//实例化一个velocity模版引擎
            //        vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            //        vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
            //        vltEngine.Init();

            //        VelocityContext vltContext = new VelocityContext();
            //        vltContext.Put("username", username );//设置参数,在模板中可以通过$data来引用
            //        vltContext.Put("password", password );
            //        vltContext.Put("msg", "登录失败");
            //        Template vltTemplate = vltEngine.GetTemplate("login.htm");
            //        System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            //        vltTemplate.Merge(vltContext, vltWriter);

            //        string html = vltWriter.GetStringBuilder().ToString();//得到html这个模板
            //        context.Response.Write(html);
            //  }
            //}

            //VelocityEngine vltEngine = new VelocityEngine();
            //vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER, "file");
            //vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH, System.Web.Hosting.HostingEnvironment.MapPath("~/templates"));//模板文件所在的文件夹
            //vltEngine.Init();

            //VelocityContext vltContext = new VelocityContext();
            //vltContext.Put("p", person);//设置参数,在模板中可以通过$data来引用
            //Template vltTemplate = vltEngine.GetTemplate("test.htm");
            //System.IO.StringWriter vltWriter = new System.IO.StringWriter();
            //vltTemplate.Merge(vltContext, vltWriter);

            //string html = vltWriter.GetStringBuilder().ToString();
        }

1、基本用法

  vltContext.Put("username", username);      在模板中可以通过$username来引用

  <input type="text" name="username" value="$username" />

  2、对象的属性

  下面演示一些更加高级的用法,直接Put一个对象,然后在模版中引用其属性。Nvelocity还可以支持对象的属性是对象的调用方法,引用的时候就好比$p.Name。

  先定义一个C#类,Person.cs

public class Person
    {
        public string name{ get; set; }
        public string age { get; set; }
    }

  然后,在处理的.ashx文件中初始化模板与输入:

Person p = new Person();
p.name = "Dragon";
p.age  = "11111";

//传入模板所需要的参数
vltContext.Put("p", p);

  在.htm文件中调用对象:

用户名:<input type="text" name="username" value= "$p.name" /><br />
年&nbsp;&nbsp;&nbsp; 龄:<input type="text" name="password"  value= "$p.age" /><br />

  3、对象的索引

  在.ashx文件初始化模板与输入:

Dictionary<string,string> dict = new Dictionary<string,string>();
dict["name"] = "Dragon";
dict["address"]  = "guangxi";

//传入模板所需要的参数
vltContext.Put("dict", dict);

  在.htm文件中调用对象:

$dict.name<br />
$dict.address

  4、ForEach遍历  

  用List方式

  在.ashx文件初始化模板与输入:

//List类型
List<Person> lstps = new List<Person>();
lstps.Add(new Person{ name = "Dragon",age = "30"});
lstps.Add(new Person{ name = "YYK", age = "28" });

  格式:

  #foreach($element in $list)

    This is $element

  #end

  在.htm文件中调用对象:

<ul>
#foreach($p in $lstps)
    <li>$p.name,$p.age</li>
#end
</ul>

  在前台的模版中,有关后台代码的编写,如果以#开头,比如#foreach ,因为没有大括号的约束,所以结束时以#end为标识,ForEach和If还可以嵌套使用,就像平时我们写后台代码的那样,只是语法稍稍有点不同而已。

  5、IF判断

  在.ashx文件初始化模板与输入:

//数组
string[] strs = {"Dragon","guangxi","web"};
//传入模板所需要的参数
vltContext.Put("strs", strs);

  在.htm文件中调用对象:

  格式:

  #if(condition)   #elseif(condition)   #else   #end

<ul>
#foreach($str in $strs)
    #if ($str == "Dragon")
    <li>$str</li>
    #elseif($str == "guangxi")
    <li>$str</li>
    #end
#end
</ul>

  6、Parse和Include

  顾名思义,#include就是在模版中在将其他模版包括进来,就好比网站的头部,尾部,广告模版等等,这些内容都是相同的时候,就可以做成一个单独的模版供各处引用。

  #parse的用法跟#include相类似,如果将上面的代码改成#parse之后,效果是一样的,#parse的特殊功能在于,它可以解析Nvelocity元素,比如,body.html 模版使用Nvelocity变量  $body ,如果使用#parse引用head.html和footer.html两个模版,则在head.html、footer.html模版中继续可以使用$body这个变量,而#include做不到,并且相关的Nvelocity元素(#foreach、#if)也不起效果,只能原样输出,所以#parse > #inclued。

  7、使用#set

  前台的Nvelocity代码中,根据需要,我们可以声明一个供前台使用的参数,这样就免得后台代码再次传递过来了,对于一些简单逻辑,我们可以这样实现

  在.htm文件中调用对象:

#set($a=1+6)
<p style="text-align:center">A的值是:$a</p>

  使用匿名类来进行代码封装

对于Nvelocity我们的重点应该是放在编写适合需求的模板,后台的代码基本上是一次封装,多次调用即可了,只需要把要Put的对象做成一个可变参数,剩余的代码进行一个封装就行了,那么如何更好的调用,我建议使用匿名类,因为随着模板的编写,我们可能需要传递多种、多个数据,使用匿名类的好处就是,类属性自定义而不用像自定义一个类型那样,每次增加数据属性就得去修改一下类型,这样显得很优雅很随性简便。

//匿名类
var models = new { head = new { title = "匿名类测试",head = "系统" }, foot = new { content = "技术支持:Dragon" } };
时间: 2024-11-05 18:50:08

Nvelocity举例的相关文章

Nvelocity对象索引和#foreach举例

首先写一个login.ashx的一般处理程序,引用Nvelocity动态类库,在写一个数组一个list集合和一个字典集合. 放入到参数中,并且指定模版的网页. public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/html"; Dictionary<string, string> dict = new Dictionary<string, strin

Asp.net动态页面静态化之初始NVelocity模板引擎

Asp.net动态页面静态化之初始NVelocity模板引擎 静态页面是网页的代码都在页面中,不须要运行asp,php,jsp,.net等程序生成client网页代码的网页,静态页面网址中一般不含"?"."="."&"等特殊符号. 静态页面不能自主管理公布更新的页面,假设想更新网页内容,要通过FTP软件把文件DOWN下来用网页制作软件改动(通过fso等技术例外) 常见的静态页面举例:.html扩展名的..htm扩展名的. 注意:静态页面并

JavaSE-接口应用举例

package com.btp.t2; /* * 接口应用的举例 */ public class TestUSB { public static void main(String[] args) { new Computer().doWork(new Printer()); new Computer().doWork(new Flash()); //实现接口的匿名类的对象 USB phone=new USB(){ @Override public void start() { // TODO 自

veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象

veridata实验举例(3)验证veridata查找出insert操作导致的不同步现象 续接:<veridata实验举例(2)验证表BONUS与表SALGRADE两节点同步情况>,地址:点击打开链接 环境: Item Source System Target System Platform Red Hat Enterprise Linux Server release 5.4 Red Hat Enterprise Linux Server release 5.4 Hostname gc1 g

C++多重继承中的虚继承和虚函数举例

上一篇虚继承举例:http://10638473.blog.51cto.com/10628473/1964414 本文将A类中的show()函数前加上virtual关键字. //多重继承 #include <iostream> using namespace std; class A { public:     int a;     A(int a=0):a(a)     {         cout<<"A基类A::A()"<<endl;     

c++局部变量经典举例

局部变量: 在函数内部声明的变量为局部变量,局部变量的意思即该变量只存活在该函数中,假如该函数调用结束,那么该变量的寿命也结束了. 举例: #include<iostream> using namespace std; void swap(int ,int );//两个参数变量可以省略 int main() { int x=3,y=4; cout<<"在main函数中,调用swap函数之前,x的值为"<<x<<",y的值为:&q

cookie使用举例(添加购物车商品_移除购物车商品)

之前介绍过cookie和session的原理和区别.下面举例说明一下cookie在实际项目中的使用.使用cookie实现购物车功能: 1.往购物车添加商品 2.从购物车里移除商品 主要是要点是:以产品id作为主键进行判断.如果这个添加的产品id信息已经在cookie里面存在,则添加失败(这里不考虑同一个商品重复添加多个的问题.因为只是cookie的简单举例):否则则把该产品的信息保存在cookie里面.因此存在用户手动清楚cookie的情况,所以需要判断: 1 if(cookieMap.cont

聚集索引与非聚集索引的用法举例与使用注意

聚集索引 用法举例 小明需要查找一个人的姓名,知道他在公司的营销部门的1010办公室的4号座位.这个时候如果需要专门为小明建一个聚集索引表就是,以公司部门表内部门名称排序,再以房间总表序号排序,最后以房间详细表的座位表排序,这样就可以最快的找到他要找的人 聚集索引类似于一个字典,我们知道拼音来寻找字,首先我们知道字音节的首字母,从按a-z排序的字典中找到这个字首字母所在的区域,再从这个区域找到韵母所在的区域,当然韵母在字典中也有顺序,最后就可以找到我们想要的字了 注意事项 限制原则 每个表只能有

shell-script的简单举例

#!/bin/bash #defind the path PATH=/usr/local export PATH read -p "please input your first name:" firstname reap -p "please input your last name:" lastname echo -e "\nyour name is: $firstname $lastname" #use date create file r