Velocity 模板基本用法

2024-04-01 15:18
文章标签 模板 用法 基本 velocity

本文主要是介绍Velocity 模板基本用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Velocity是一个基于java的模板引擎。它允许任何人仅仅简单的使用模板语言来引用由java代码定义的对象。

当Velocity应用于web开发时,界面设计人员可以和java程序开发人员同步开发一个遵循MVC架构的web站点,也就是说,页面设计人员可以只 关注页面的显示效果,而由java程序开发人员关注业务逻辑编码。Velocity将java代码从web页面中分离出来,这样为web站点的长期维护提 供了便利,同时也为我们在JSP和PHP之外又提供了一种可选的方案。

SpringMVC整合Velocity

1.添加依赖

 <dependency><groupId>velocity</groupId><artifactId>velocity</artifactId><version>${velocity.version}</version>
</dependency>
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-tools</artifactId><version>2.0</version>
</dependency>
<dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version>
</dependency>

2.在Spring-mvc.xml中配置Velocity

 <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"><property name="resourceLoaderPath" value="/WEB-INF/velocity/" /><!-- 模板存放的路径 --></bean><bean id="velocityLayoutViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityViewResolver"><property name="suffix" value=".vm"/></bean>

velocity.properties

#encoding
input.encoding=UTF-8
output.encoding=UTF-8#autoreload when vm changed
file.resource.loader.cache=false
file.resource.loader.modificationCheckInterval=2
velocimacro.library.autoreload=false

也可以直接在xml中配置

  <bean id="velocityConfigurer" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer"><property name="configLocation" value="classpath:velocity.properties"/><property name="velocityProperties"><props><prop key="directive.foreach.counter.name">loopCounter</prop><prop key="directive.foreach.counter.initial.value">0</prop><prop key="input.encoding">utf-8</prop><!-- 指定模板引擎进行模板处理的编码 --><prop key="output.encoding">utf-8</prop><!-- 指定输出流的编码 --></props></property></bean>

基本用法

1.”#”用来标识Velocity的脚本语句。

如:#set、#if 、#else、#foreach、#end、#include、#parse、#macro等。

2.”$”用来标识一个对象(或理解为PHP的变量)

如:i、i、user等。

3.”{}”用来明确标识Velocity变量,和普通模版字符串区分开来;

如:${user}‘s age 可以显示为 riqi’s age。

4.”!”强制把不存在的变量显示为空白。

如:!msg,假如msg对象为空,则模版中不显示该变量;如果缺少”!”,则显示!msg,假如msg对象为空,则模版中不显示该变量;如果缺少”!”,则显示msg字符串,这是我们不想要的结果。

5.变量的定义和赋值。不需要指定变量的类型,类似弱类型语言PHP可以随意指定,在赋值后自动判定变量的类型,如:

#set($username="riqi") ##设置用户名
#set($age=26) ##设置年龄

6.数组循环:

#foreach ($user in $users)$!{user} $!{velocityCount} <br /> 
#end

users可以是Vector、Hashtable或者Array,Velocity提供了得到循环次数的值:users可以是Vector、Hashtable或者Array,Velocity提供了得到循环次数的值:velocityCount。

7.语句注释:

单行注释:## 单行注释代码

多行注释:#* 多行注释代码 *#

8.模版支持关系和逻辑操作符运算,如:&&、||、! 等

9.宏定义:#macro ,类似PHP声明一个函数,其中有函数名称和参数列表。先定义再调用。

10.终止命令:#stop,类似PHP的exit(); 停止执行模板引擎并返回。

11.引入公共模版文件:#include与#parse,它们的差异是:

(1) 与#include不同的是,#parse只能指定单个对象。而#include可以有多个

如果您需要引入多个文件,可以用逗号分隔就行:

#include ("one.gif", "two.txt", "three.htm" )

在括号内可以是文件名,但是更多的时候是使用变量的:

#include ( “greetings.txt”, $seasonalstock )

(2) #include被引入文件的内容将不会通过模板引擎解析;

#parse引入的文件内容Velocity将解析其中的velocity语法并移交给模板,意思就是说相当与把引入的文件copy到文件中。

(3) #parse是可以递归调用的。

12.转义字符’\’.

这个和其它语言没有差异,假如:user=”riqi”;那么, useruser="riqi"; user表示输出user字符串,$user表示输出\riqi。

13.Velocity内置了一部分java对象 如:request、request、response、$session等,在vm模版里可以直接调用。

细节整理:

Velocity判断某个变量是否为空的方式:

#if($!变量名)……#else……#end

或者:

#if("" == $!varName)……#else……#end

例子

package controller;import model.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;/*** VelocityController* Velocity模板引擎* Created by heqianqian on 2017/4/27.*/
@Controller
@RequestMapping("/velocity")
public class VelocityController {@RequestMapping("/show")public String show(Map<String, Object> map) {List<User> userList = new ArrayList<User>();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");for (int i = 0; i < 10; i++) {userList.add(new User(i, "hqq" + i));}map.put("userList", userList);return "show";}
}
<!DOCTYPE html>
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"/><title>Show</title>
</head>
<body>
<h1>Velocity</h1>
<hr/>
<h2>1. "#"用来标识Velocity的脚本语句。</h2>
<h3>1.1 \#set</h3>
#set($username="riqi")
#set($age=26)
用户名: $username
年龄: $age
<h3>1.2 \#if</h3>
#if($age>18)
$username is not teenager
#else$username is teenager
#end
<h3>1.3 \#foreach</h3>
<ul>
#foreach($user in $userList)<li>$user.id:$user.name</li>
#end
</ul>
<h3>1.4 \#include</h3>
#include("../file/note.txt")
</body>
</html>

这篇关于Velocity 模板基本用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/867487

相关文章

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放