• 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" } };
  • 相关阅读:
    Java类与对象
    读《大道至简——团队缺乏的不只是管理》有感
    java课后作业
    c++ 创建单项链表
    c++ 结构指针和双向链表
    c++ 自定义数据结构运用
    c++ 时间函数和结构化数据
    c++ 结束程序的几种方式
    c++ main函数的参数
    c++ 参数个数可变的函数
  • 原文地址:https://www.cnblogs.com/dandandeyoushangnan/p/4521804.html
Copyright © 2020-2023  润新知