zoukankan      html  css  js  c++  java
  • Velocity教程

    1.什么是Velocity

    Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity可以获取在java语言中定义的对象,从而实现界面和java代码的真正分离,这意味着可以使用velocity替代jsp的开发模式了(实际上笔者所在的公司已经这么做了)。这使得前端开发人员可以和 Java 程序开发人员同步开发一个遵循 MVC 架构的 web 站点,在实际应用中,velocity还可以应用于很多其他的场景.
    2.velocity介绍

    Velocity是一个基于Java的模板引擎,其提供了一个Context容器,在java代码里面我们可以往容器中存值,然后在vm文件中使用特定的语法获取,这是velocity基本的用法,其与jsp、freemarker并称为三大视图展现技术,相对于jsp而言,velocity对前后端的分离更加彻底:在vm文件中不允许出现java代码,而jsp文件中却可以.

    3.velocity的基本用法
    在这里我们以一个HelloVelocity作为Velocity的入门实例.首先在官网下载velocity的最新发布包,新建普通java项目,引入其中的velocity-1.7.jar和lib文件夹下的所有jar包即可. 然后分为如下两步。
    4.velocity变量
    在Velocity中也有变量的概念,使用$符声明变量,可以声明变量也可以对变量进行赋值(变量是弱类型的)。另外还可以使用$取出在VelocityContext容器中存放的值
    #set($!{name} = "velocity")
    #set($!{foo} = $bar)
    #set($foo =“hello”)
    #set($foo.name = $bar.name)
    #set($foo.name = $bar.getName($arg))
    #set($foo = 123)
    #set($foo = [“foo”,$bar])
    

     使用$vari获取变量时,如果变量不存在,Velocity引擎会将其原样输出, 通过使用$!{}的形式可以将不存在的变量变成空白输出.

    5.velocity循环

    #foreach($item in $list)
     $item
     $velocityCount 
    #end
    

     $item代表遍历的每一项,elocityCount是Velocity提供的用来记录当前循环次数的计数器,默认从1开始计数,可以在velocity.properties文件中修改其初始值

    6.velocity条件控制语句

    #if(condition)
    ...dosonmething...
    #elseif(condition)
    ...dosomething...
    #else
    ...dosomething...
    #end
    

    7.velocity宏

    ## 声明宏
    #macro(sayHello $name)
       hello $name
    #end
    ## 使用宏
    #sayHello("NICK")
    

    8.velocity网页嵌套

    在Velocity中可以通过parse或者include指令引入外部vm文件,

    二者存在区别:include指令会将外部文件原样输出,而parse指令会先对其进行解析再输出(即对外部文件中的vm语法解析)

    #parse("header.vm")
    #include("footer.vm")
    

    9.vm文件

    vm文件是作为jsp的替代来展示给用户

    在vm文件中可以获得在Context域或request等域中存放的值。

    默认情况下,会在资源根路径下搜索vm文件,所以直接将vm放在根路径下即可(也可以通过配置velocity.properties指定加载路径)
    如下:

    #set($greet = "hello")
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
     <p>$!{greet} $!{fullName}</p>
     <p>my another name is $!{anotherName}</p>
    </body>
    </html>
    

    10.布局母版vm文件

    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>${page_title}</title>
    #if($!{CSS})
     #foreach($_css in ${CSS})
       <link type="text/css" rel="stylesheet" href="${ContextPath}/$_css">
     #end
    #end
    </head>
    <body>
      <div class="header">
          #parse("/templates/layout/header.vm")
      </div>
      <div class="container">
          <div class="sub">
              #parse($sub)
          </div>
          <div class="main">
              $screen_content
          </div>
      </div>
    #if($!JS)
     #foreach($_js in $JS)
       <script type="text/javascript" src="${CntextPath}/${_js}">
     #end
    #end
    </body>
    </html>
    

    其中,有个特殊的变量 screen_content,这是Velocity内置的变量,代表将要转发的页面

     

  • 相关阅读:
    java 编码分析
    httpclient
    http://www.cognoschina.net/club/
    (原创)冬日里的一抹暖(摄影,欣赏)
    (原创)Louis Aston Knight 的家(摄影,欣赏)
    (原创)微笑佛国(摄影,欣赏)
    (原创)黑白风景(摄影,欣赏)
    (原创)浪迹天涯的哈士奇(摄影,欣赏)
    (转载)天山公路(摄影,欣赏)
    (原创)巩固理解基于DS18B20的1-wire协议(MCU,经验)
  • 原文地址:https://www.cnblogs.com/cainame/p/11349986.html
Copyright © 2011-2022 走看看