Velocity的简单使用

velocity

简介

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。它作为一款成熟的基于java的模板引擎,能够帮我们实现页面静态化,同时它将Java代码与网页分开,使网站在其生命周期内更加可维护,并为Java Server Pages(JSP)或PHP提供了可行的替代方案。

基本语法

#

Velocity关键字都是使用#开头的,如#set、#if、#else、#end、#foreach等

$

Velocity变量都是使用 开 头 的 , 如 : 开头的,如: name、$msg

如果某个Velocity变量不存在,那么页面中就会显示$xxx的形式,为了避免这种形式,可以在变量名称前加上!如页面中含有$!msg,如果msg有值,将显示msg的值;如果不存在就会显示为空白(建议使用

变量

变量的定义
<body>
#set($root = "www")  //定义root变量值为www
#set($name = "index")  //定义name变量值为index
#set($template = "$root/$name")  //定义template变量值为www/index
hello $template
</body>

输出结果

hello www/index
变量的赋值

赋值的左边必须是一个变量,或者是属性的引用。右边可以是:变量引用字面字符串属性引用方法引用字面数字、数组

#set($name = $bill)   ##变量引用  
#set($name.pre = "monica")  ##字符串  
#set($name.last = $address.num) ##属性引用  
#set($name.mid = $hotel.find($web)) ##方法引用  
#set($name.num = 123) ##数字  
#set($name.say = ["yes",$my,"yes"]) ##数组 

velocity会将属性解释为属性的get方法,如:

$foo.Bar   等同于 $foo.getBar()
$foo.User("join")  等同于 $foo.getUser("join")
$foo.Request.ServerName 等同于 $foo.getRequest().getServerName()

循环

#foreach( 单个元素名称 in 集合)  
      ....  
#end
$velocityCount

在foreach中velocityCount表示循环的次数

$velocityCount是循环的索引值

$velocityCount都是从1开始计数

注意:加1的情况可以正确计算出结果,并且能够正确显示,可是减1的语句直接作为一个字符串输出了,不能计算出结果。

解决方案:

v#set($temp=$velocityCount)
  $temp-1

示例

#foreach( $num in [2..-2])  
 this is $num.</br>  
#end

输出

this is 2.
this is 1.
this is 0.
this is -1.
this is -2

条件

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

关系和逻辑操作符

&& 并且  || 或者   ! 取反

注释

单行注释##

##这里写注释

多行注释#* *#

#*  
    这个写注释  可以写多行的注释
*# 

基本的使用步驟

  1. 初始化Velocity。Velocity可以使用两种模式,作为“单独的运行时实例”的单例模式(在下面的内容会介绍),你仅仅只需要初始化一次。
  2. 创建一个Context对象(后面会介绍这是什么)。
  3. 把你的数据对象添加到Context(上下文)。
  4. 选择一个模板。
  5. ‘合并’ (merge)模板和你的数据输出。

结合springboot测试

<!--在高版本的springboot中是不支持velocity了。最高只到1.4.x版本支持-->
        <!-- 引入velocity模板  -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-velocity</artifactId>
        </dependency>

        <!--<dependency>-->
            <!--<groupId>org.apache.velocity</groupId>-->
            <!--<artifactId>velocity</artifactId>-->
            <!--<version>1.7</version>-->
        <!--</dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.apache.velocity</groupId>-->
            <!--<artifactId>velocity-tools</artifactId>-->
            <!--<version>2.0</version>-->
        <!--</dependency>-->

yml配置文件

spring.velocity.cache= false
spring.velocity.charset=UTF-8
spring.velocity.check-template-location=true
spring.velocity.content-type=text/html
spring.velocity.enabled=true
spring.velocity.resource-loader-path=/templates
spring.velocity.prefix=/templates/
spring.velocity.suffix=.vm

Controller层

@Controller
public class VelocityContoller {
    
    

            @RequestMapping("/")
            public String index(Map map){
    
    
                User user = new User();
                user.setAge(23);
                user.setDate(new Date());
                user.setId("1");
                user.setName("张三");

                map.put("message", "获取用户信息");
                map.put("name", "张三");
                //map.put("age", "24");
                map.put("user",user);
                return "index";
            }
}

index.vm

<!DOCTYPE html>
<head lang="en">
    <meta charset="UTF-8" />
    <title>Insert title here</title>
</head>
<html>
<body>
    $message
    $name
    $!age
<br>
    $user.age
    $user.getId()
    $user.name
    $user.date
<br>
    #if($user.getId()==2)
        id為:$user.getId()
    #else
        id為:null
    #end

<br>
#set($ljk="luojiankang")
$ljk

</body>
</html>

输出页面上
在这里插入图片描述

总结

Velocity将Java代码从Web 页面中分离出来,使用Web站点从长远看更容易维护,并且提供了一种可行的JavaServer Pages替代解决方案。

Velocity是一种基于Java的模板引擎,但允许任何人使用简单而强大的模板语言来引用定义在Java代码中的对象。

Velocity就是MVC架构的一种实现,但它更多的是关注在Model和View之间,作为它们的桥梁。

猜你喜欢

转载自blog.csdn.net/qq_42224683/article/details/110673499