zoukankan      html  css  js  c++  java
  • nvelocity学习笔记

    老大终于给我们布置了实战性的任务。嘿嘿。想到自己做的东西可能要被千千万万的人看到,心里有点小兴奋。

    不过,老大的任务里有个东西我以前没有接触过。所以今天一天都在学习这个——nvelocity。嘿嘿。现在把我的学习笔记贴出来,供以后参考。嘿嘿。

    1、  NVelocityVelocity.NET平台上的一个实现。

    2、  原来的xml是这个样子的:

    <?xml version=’1.0’ encoding=’utf-8’?>

    <users count=’用户人数’ title=’标题’>

               < !—要是可以在这里来个循环,把用户循环显示出来就好了à

               < user>

                        < name>用户名</name>

                        < sex>性别</sex>

                        < city>城市</city>

               < /user>

    <users>

    生成貌似上面xml格式数据的模板应该怎么写?如下代码:

    <?xml version=’1.0’ encoding=’utf-8’?>

    #foreach($u in $ListUsers)

    #beforeall

    <users count=’$Count’ title=’$Title’>

               #each

               < user>

                        < name>$u.Name</name>

                        < sex>$u.Sex</sex>

                        < city>$u.City</city>

               < /user>

    #afterall

    </users>

    #nodata

    <users>暂无用户资料</users>

    #end

    然后看看在服务器端怎么调用这个模板,并传给这个模板listUsers这个参数:

    //获取到用户列表

    IList<UserInfo> listUsers=UserInfoService.GetAllUsers();

    //创建一个模板引擎

    VelocityEngine vltEngine=new VelocityEngine();

    //文件型模板,还可以是assembly,则使用资源文件

    vltEngine.SetProperty(RuntimeConstants.RESOURCE_LOADER,”file”);

    //模板存放目录

    vltEngine.SetProperty(RuntimeConstants.FILE_RESOURCE_LOADER_PATH,Server.MapPath(“~/Template”));

    vltEngine.Init();

    //定义一个模板上下文

    VelocityContext vltContext=new VelocityContext();

    //传入模板所需要的参数

    vltContext.Put(“Title”,”NVelocity文件模板例子”);

    vltContext.Put(“Count”,listUsers.Count);

    vltContext.Put(“ListUsers”,listUsers);

    //获取我们刚才所定义的模板,上面已设置模板目录,此处用相对路径即可

    Template vltTemplate=vltEngine.GetTemplate(“users.xml”);

    //定义一个字符串输出流

    StringWriter vltWriter=new StringWriter();

    //根据模板的上下文,将模板生成的内容写进刚才定义的字符串输出流中

    vltTemplate.Merge(vltContext,vltWriter);

    //输出字符串流中的数据

    Response.Write(vltWriter.GetStringBuilder().ToString());

    3、  nVelocity是一个基于.NET的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象。

    4、  VTL——nVelocity template language

    5、  Velocity中仅String可以被赋值给变量。使用方式:#set($a=”Velocity”)

    6、  关于Nvelocity的语法:

    1、  单行注释:##单行注释

    2、  多行注释:#*

    多行注释

    多行注释

                                         *#

             3、文档格式:#**

                      这是一个VTL注释块

                     可以用来存储这些信息文档的作者

                     及版本信息:

                     @version 5                  @author

                                         **#

    4、  VTL中有三种类型的references:变量(variables)、属性(properties)、方法(methods)。

    5、  VTL中的一切reference可以作为一个String对象处理。

    6、  属性的例子:

    $customer.Address

    $purchase.Total

    $customer.Address有两种含义,它可以表示:查找hashtable对象customer中以Address为关键字的值;也可以表示调用customer对象的getAddress()方法。

    7、  方法就是被定义在.NET中的一段代码,并且它有完成某些有用工作的能力。例如:

    $customer.getAddress()

    $purchase.getTotal()

    $page.setTitle(“My Home Page”)

    $person.setAttribute([“Strange”,”Weird”,”Excited”])

    VTL属性可以作为VTL方法的缩写。$customer.Address属性和使用$customer.getAddress()方法具有相同的效果。使用属性的方式比较合理。属性和方法的不同点在于你能够给一个方法指定一个参数列表。

    8、  可以使用如下这种方式给文本框传值:

    <input type=”text” name=”email” value=”$!email” />

    或者:<input type=”text” name=”email” value=”$!{email}” />

    9、  VTL中使用$2.5这样的货币标识是没有问题的,因为VTL中的reference总是以一个大写或者小写的字母开始。

    10、  VTL中使用作为转义字符。

    #set($email=”foo”)

    $email         “$email    “”$email         “””$email         对应的输出如下:

    Foo     $email      “foo  “”$email

    11、  咋正在VTL中定义变量呢?是通过#set($email=”foo”)这样的方式吗?

    #set($foo=”gibbous”)

    $moon=$foo的输出结果是:$moon=gibbous

    12、  赋值#set被用来设这一个reference的值。如:#set($foo=”abd”)

    等号左边是一个变量或者属性reference,右侧可以是变量/字符串/属性/方法/数字/ArrayList     请看下面的例子:

    #set($foo=$bill)           ##变量referen

    #set($foo.Friend=”mone”)         ##字符串

    #set($foo.ban=$whke.lean)       ##属性reference

    #set($foo.plan=$soss.wef($web))     ##方法reference

    #set($foo.num=123)           ##数字

    #set($foo.say=[“not”,”my”,”own”])            ##ArrayList

    注意:ArrayList的取值方法为:$foo.say.get(0)

    #set($value=$foo+1)           ##右侧也可以是简单的算术运算,如加减乘除

    13、  使用#setdirective时,字符串被封闭在一对双引号内。如:

    #set($foo=”www”)

    $set($fnn=”abd.vm”)

    #set($fcc=”$foo/$fnn”)

    $fcc

    得到的结果是:www/abc.vm

    但是,当字符串被封装在单引号内时,它将不被解析。

    上面这个特性可以通过修改Views目录下的nvelocity.properties文件的stringliterals.interpolate=false的值来改变上面的特性是否有效。

    14、  条件语句if/elseif/else

    1、  Nvelocity的常用功能简介

    A、在页面定义变量,并进行简单的运算。

    B、在页面获得对后台程序实体对象的引用。

    C、在页面中迭代实体对象集合。

    D、在页面中获得实体对象的属性及其方法。

    E、  对逻辑判读语句的支持。

    F、  对外部文件的引用。

    G、对外部文件的解析。

    2、  基本语法:

    1、  特殊字符介绍:

    #                   表示开始做什么事情

    $                   表示用于获得什么

    ##       单行注释

    #*…*#         多行注释

    2、  关键字

    set               开始做什么事情,比如定义变量,给变量重新赋值等

    foreach                迭代语句

    if                            条件判断语句

    elseif

    else

    include                 对外部文件的引用,开始位置为模板路径

    parse                    对外部文件的引用,并用nvelocity方式解析

    macro                            创建宏,可以重复做某件事,类似于方法

    even                      双数执行

    odd                        单数执行

    each                      每次都执行

    注意:所有的变量在未定义之前不能使用。.NET后台定义的对象除外。模板语言区分大小写,所有的关键字必须小写。上面的列表不是很全。

    3、  创建宏。可以当做方法使用。

    创建:#macro(Add $a $b)

                        #set($c=$a+$b)

               < p>最后的结果:</p>

               #end

    调用:#Add(1 2)

    注意:模板引擎的初始化方法有三种:一种参数为模板文件内容,一种是带模板文件地址。另一种就是假如在宏里面引入一个判断语句,则可以实现递归调用。这里有个问题:如果是带模板文件地址的话,发现模板文件内容yoga宏的时候好像有点问题。???

    4、  使用对象方法

    定义变量:#set($str=”cnf”)

    调用方法:$str.SubString(0,1)

    输出:c

    定义变量:#set($a=123)

    调用方法:$a.GetType()

    输出:System.Int32

    注意:不管是.NET代码定义的对象,还是设计人员在页面中定义的变量,都可以使用对象的方法和属性。???(意思是都可以用c#中的方法吗?)

    5、  使用evenodd简化代码,each辅助

    #foreach($p in $ps)

    #even

    < p>双行:$p.StrName</p>

    #odd

    < p>单行:$p.StrSex</p>

    #end

    注意:在使用这两个关键字时,出现了与创建宏一样的问题,即在初始化模板引擎的时候,如果是用模板文件内容初始化的,会出现问题。?????????(不懂)

    6、  引用外部文件

    Includeparse都有引入外部文件的作用,不同的是parse会根据nvelocity模板语言解析外部文件。也就是说如果引入当前模板,会出现死循环。

    7、  #foreach语句必须以#end结束

    8、  创建数组

    创建:#set($List=[“”,””])

    遍历:#foreach($Item in $List)

               < p>List成员:$Item</p>

               #end

    输出:List成员:男

               List成员:女

    来处:http://blog.csdn.net/zoohouse/article/details/6285548

  • 相关阅读:
    Markdown 简明语法手册
    linuxmint
    添加 Windows 8.1 无虚拟机启动项 解决极品飞车的不支持虚拟机报错
    工作室案例在线展示
    流风ASP.NET框架商业版-工作流1.0简介
    GNS3的使用2
    再见
    JSR303结合切面校验参数
    统一异常处理
    分布式会话
  • 原文地址:https://www.cnblogs.com/lidj/p/3488778.html
Copyright © 2011-2022 走看看