Velocity模板引擎使用笔记

题记

    在公司的项目中,前台界面的展现是使用Velocity模版来实现的。现在利用一些时间,把以前的使用经验记录一下,不是什么宝典秘籍,也不是什么高深理论,纯粹为一些使用经验记录,开发知识备忘。

1.介绍

    Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。理解这句话很重要,Veocity模版的作用,实质上是让开发者在Web页面上可以直接使用java数据对象和命令。

    “模版引擎”是一个整体的概念,Velocity只是其中的一种实现方式而已,也并不仅仅是java语言有模版引擎的概念,其他PHP、Python、C#都有可用的模版引擎,具体信息可参考:http://www.oschina.net/project/tag/136/template-engine?lang=0&os=0&sort=view 

    理解Velocity模版,还需要区分清楚“模版”和“页面”的概念;“模版”可以看作是一个等待注入数据的一个框架,在将这个框架注入相应的数据以后,就能够生成一个用户在浏览器中看到的“页面”(请求的后缀名可以为 .html 或 .do 或 .action 或者没有,这个根据MVC框架配置确定)。

2.如何在项目中使用?

(1)配置模版引擎:

<bean id="velocityConfig" class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
    <property name="resourceLoaderPath" value="/WEB-INF/views/" />
    <property name="configLocation" value="classpath:velocity.properties" />
</bean>

    resourceLoaderPath 属性指定模版文件在项目中的路径

(2)配置视图解析器

<bean id="velocityViewResolver" class="org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver">
    <property name="layoutUrl" value="layout/layout.vm" />
    <property name="suffix" value=".vm" />
    <property name="contentType" value="text/html;charset=UTF-8" />
</bean>

    suffix 属性指定模版文件的后缀名,视图解析器将会按照"模版逻辑名"+suffix 的格式来寻找模版文件。

    例如:return new ModelAndView("login"); 视图的逻辑名为 login,在解析视图时,velocityViewResolver会在 resourceLoaderPath 路径下寻找“login.vm”这个模版。

3."$"引用和"#"指令

    首先介绍两个特殊符号"$"和"#":以$开头的表示“引用”的意思,是指取得一些东东。而"指令"(Directives)则以#开头来表示,有点“做些什么动作”的意思。在模版页面中,引用一个java 数据对象时,使用 $userName 的格式,这个是简单的变量引用,还可以直接引用对象的属性,例如 $userInfo.userName 。"指令"以"#"开头,可以看作是VTL(Velocity Template Language)的流程控制语言,例如:赋值,循环,条件判断,引入模版,解析模版,宏调用等。下面是一个循环示例:

#foreach( $user in $userList) 
     #if( $user.userRole == 1)
        <h1>登录成功:$user.userName</h1>
    #end
#end

    下面是一个条件判断的示例:

#if( $user.userRole == 2) 
    <h1>没有登录权限:$user.userName</h1>
#elseif( $user.userRole == 3)
    <h1>您不在此权限范围:$user.userName</h1>
#end

4.很有用的#parse()指令

    在页面中,经常遇到有相同内容的元素,比如几个页面的导航栏都是一样的,就可以专门定义一个 header.vm 模版,在其他需要使用到的页面中,直接 #parse("header.vm") 就ok了,注意,#parse() 后面是不加分号的。这样做的好处也是很明显的,如果要修改这个 header 的话,只需要修改一处,其他页面就全部更新了。如下为一个完整示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>示例网站</title>
</head>
<body>
    #parse("/layout/header.vm")
    <div class="page_wrap">
        我是页面中的文字,请无视~
    </div>
    #parse("/layout/footer.vm")
</body>

5.接收浏览器请求(SpringMVC),响应页面

@RequestMapping(value="/login", method = RequestMethod.GET)
public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
    ModelAndView mv = new ModelAndView();
    UserInfo user = new UserInfo();
    user.setUserRole(1);
    user.setUserName("abc");
    mv.addObject("user", user);
    mv.setViewName("login");
    return mv;
}

6.扩展阅读

Velocity官方网站:http://velocity.apache.org/

Velocity模版使用指南:http://www.cnblogs.com/firstyi/archive/2007/11/01/945745.html

使用 Velocity 实现客户端和服务器端模板:https://www.ibm.com/developerworks/cn/java/j-velocity/index.html

 Spring MVC:使用 Web 视图技术:http://www.ibm.com/developerworks/cn/education/opensource/os-ag-springframe6/section4.html


转载于:https://my.oschina.net/xiaozhuang/blog/90427

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值