Velocity学习笔记-1

  1. 定义

    Velocity是一个基于java的模板引擎,它允许任何人仅仅使用模板语言来引用由java代码定义的对象. 它还可以从模板中生成SQL语句或其它脚本提供给web pages. 它也可以独立使用---做为一个工具类(utility class)用来生成源代码、报表、邮件模板等.

  1. VTL语法
    1. 注释
      1. 单行注释 “##”

          ## 页面对变量赋值

      1. 多行注释 “#**#”
          #*页面对变量赋值*#
    1. 引用(Reference)
      1. 变量

格式:$ VTL标识符

VTL标识符:字母、数字、”_”、”-“组成

                #set($company = "merit")

                   $monn = $company
           一般方式:$mud-Slinger_9
           静态(输出原始字面):$!mud-Slinger_9
            正规格式:${mud-Slinger_9}
      1. 属性

格式:$VTL标识符.VTL标识符

              $monn.Address

                 $monn.getAddress()(getter()方法)
      1. 方法

格式:$VTL标识符(参数列表)

              $monn.getAddress()

                 $page.setTitile("My Home")

                 $person.setAttributes(["page1","page2","page3"])
    1. 指令(Directives)
      1. #set 变量的定义

格式:#set(LHS = RHS)

LHS:变量引用、属性引用、简单算术表达式

RHS:引用、字符串、数字、ArralList、Map,如果RHS的结果为null,是不会赋值给LHS。

String:

     双引号:原样输出

  单引号:会被替换成相应的值

              #set($monkey = $bill) ##变量引用

                 #set($monkey.Friend = "cat") ##字符串

                 #set($monkey.Blame = $cat.Blame) ##属性应用

                 #set($monkey.Number = 123) ##数字

                 #set($monkry.say = ["Not",$my,"$ga"]) ##集合

                 #set($value = $foo+1) ##加法运算

                 #set($root = "www")

                 #set($tem = "index.vm")

                 #set($template = $root/$tem)##引用的拼接,输出结果为www/index.vm
      1. #if  #else if  #else  条件判断
              #if($foo)

                Velocity

              #end

       #if中的关系和逻辑符号:

               <、<=、==、>=、>、$$、||、!

      1. #foreach 条件循环
              #foreach($product in $allProducts)

                   $product

              #end
              $allProducts:变量的内容,Vector,Hashtable、ArrayList
                $product:被显示的值
                默认的循环次数引用变量名为#velocityCount,可以在配置文件velocity.properties中修改你想要的:
              directive.foreach.counter.name = velocityCount
                directive.foreach.counter.initial.value = 1
                #可以对所有可循环次数加一个最大值来控制,默认的是-1,表示无限制
                directive.foreach.maxloops = -1
      1. #include 引入本地文件
  1. 导入的文件内容不会被模板引擎解析
  2. 出于安全考虑,导入文件引该放到TEMPLATE_ROOT目录下
  3. 一次可以导入多个文件,文件名之间用逗号隔开
  4. 通常使用变量引用替代文件名
#include("aaa.txt",aata)
      1. #parse 引入其他模板

模板引擎会解析导入的模板引擎的VTL语句。

              #parse("parse.vm")
      1. #stop 停止模板引擎的执行并返回,在Debug时很有用
      2. #macro VTL的宏指令
  1. 允许定义一段重复使用的VTL模板(Velocimacros)
  2. 默认情况下,宏保存在VM_global_library.vm文件中
  3. Velocimacros可以有0或多个参数
  4. ##创建VTL宏showTree #macro(showTree)     #if($treeList)         #foreach($e in $value)             $e         #end     #end #end ##调用 #showTree() ##创建VTL带参数的宏 #macro(showList $val)     #if($value)         #foreach($e in $val)             $e         #end     #end #end ##调用 $showList($treeList)
  1. VTL的实际应用
  1. 初始化Velocity
  2. 创建Context对象
  3. 添加数据到Context
  4. 选择模板合并模板和数据产生输出页面
public static void main(String args) throws IOException {

    //1)初始化

    Velocity.init();

    //2)创建Context

    VelocityContext velocityContext = new VelocityContext();

    //3)添加数据到Context

    velocityContext.put("name","Velocity");

    BufferedWriter bufferedWriter  = new BufferedWriter(new OutputStreamWriter(System.out));

    Template template = Velocity.getTemplate("src/com/me/velocity/index.vm");

    //4)合并模板和数据输出到页面

    template.merge(velocityContext,bufferedWriter);

    bufferedWriter.flush();

    bufferedWriter.close();

}

index.vm

<html>

<head>

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>

<body>

<!-- 页面对变量赋值  -->

    #set( $current = "Velocity22")

<!-- 输出 -->

    $current is great!  <br/><br>

<!-- 输出后台context设置的参数 -->

    $name  <br/>



<!--String循环-->

    #foreach( $elem in $arrList)

        $elem</br>

    #end



<!--对象循环-->

    #foreach( $elem in $userList)

    名字:$elem.name 性别:$elem.sex 地址:$elem.address</br>

    #end

    hello $name

</body>

</html>
  1. Velocity与MVC架构的关系
    1. Velocity与JSP

    与JSP相比,作为一种完全自包含的模板引擎和脚本解释器,Velocity拥有完全封闭的模型。任何针对系统或Java编程语言的访问都必须明确地启用。默认情况下,Velocity模板不能访问Java编程语言的任何方面。这种封闭的模型使Velocity能够提供分离的模板表示层,与任何应用程序业务逻辑或者数据管理代码清晰地划分开,实现真正的MVC。

    1. Velocity与Struts

对于Velocity在View层的实际应用,只要在Struts-config.XML里配置好后,就可以在ACTION中直接将其mapping.forward(“success”)即可。

            <action path=”/logoff”

                        type=”org.apache.struts.webapp.example.LOgoffAction”>

                     <forward name=”success” path=”/index.vm”>

      </action>

  1. 静态引用输出

Velocity遇到一个不能处理的引用时,一般他会直接输出这个引用$email的写法,页面上会看到的是$email,如下例,我们可以在$后面加上一个!号,那么就会输出空白:

 

  1. 方法

附:

velocity官网:http://velocity.apache.org/

velocity语法参考:http://velocity.apache.org/engine/devel/vtl-reference.html

源代码参考:https://github.com/xujijun/my-spring-boot

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任风雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值