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内置的变量,代表将要转发的页面

     

  • 相关阅读:
    部署 AppGlobalResources 到 SharePoint 2010
    还原一个已删除的网站集
    使用仪表板设计器配置级联筛选器 (SharePoint Server 2010 SP1)
    File or arguments not valid for site template
    Pex and Moles Documentation
    Content Query Webpart匿名访问
    Running Moles using NUnit Console from Visual Studio
    Calling a WCF Service using jQuery in SharePoint the correct way
    Updating Content Types and Site Columns That Were Deployed as a Feature
    asp.net中判断传过来的字符串不为空的代码
  • 原文地址:https://www.cnblogs.com/cainame/p/11349986.html
Copyright © 2011-2022 走看看