`
Qieqie
  • 浏览: 337543 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

使用Velocity吧2:Velocity的layout功能

阅读更多
一、从VelocityViewServlet到VelocityLayoutServlet

使用Velocity开发web应用时,需要在web.xml中配置一个Velocity提供的VelocityViewServlet接受处理对velocity模板(即vm文件)的forward访问。VelocityViewServlet负责将设置在request中的attribute“读出”和模板文件进行merge形成最终的页面,向response输出显示在用户电脑上。

VelocityViewServlet是一个简单的易使用的。但是只要把web.xml中VelocityViewServlet换成VelocityLayoutServlet,并配置上2,3句话,将具有页面简单Layout的功能。而这个功能其实非常强大。

二、VelocityLayoutServlet可以。。。

VelocityLayoutServlet可以用来简化velocity下的页面布局开发。
使用VelocityLayoutServlet,可以使当forward到一个页面时,能把自动把该页面作为一个页面布局的一部分整体显示出来。比如访问用户资料页面,能够自动把网站的头,尾等自动也输出显示处理。

三、VelocityLayoutServlet使用按步就班

系统中有若干页面布局是这样设定的:头部(header),左侧菜单区域(sub),中右侧页面内容部(main),底部(footer)。

1、

创建文件[webapp home]/vm/layout/layout.vm如下:


 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    ...省略...
    </head>
    <body>
    	<div id="header>#parse('vm/layout/header.vm')</div>
    	<div id="content">
    		<div id="sub">#parse($sub)</div>
    		<div id="main">$screen_content</div>
    	</div>
    	<div id="footer">#parse('vm/layout/footer.vm')</div>
    </body>
</html>

$screen_content相当于一个占位符,被forward的目标页面内容将替代该处内容。
#parse($sub):表示sub位置是可以动态通过$sub变量设置的。

同时也创建'vm/layout/footer.vm''vm/layout/header.vm'这两个文件。



2、
创建WEB-INF/vm/user/profile.vm如下:(假设该页面用于显示用户的资料信息)
 
#set($layout = "layout.vm")
#set($sub= "vm/user/sub.vm" )
A: What's your name?<br>
B: My name is $user.loginName!


注意,这个文件和普通我vm不一样的地方在于前两句话。
第一句话设置这个页面使用哪个布局器。
第二句话设置sub的值,用于布局把vm/user/sub.vm文件包含进来。


同时也创建"vm/user/sub.vm"文件

3、配置velocity.properites文件

使用velocity一般都是需要配置velocity.properites的,至少应该设置input.encoding和output.encoding等。在这个文件中增加设置如下代码:

# Directory for layout templates,
#  relative to web application root directory
tools.view.servlet.layout.directory = vm/layout/

# Filepath of the default layout template
#  relative to the layout directory
#  !!!!!哥们要注意这行提示:NOT relative to the root directory of the webapp!!!!
tools.view.servlet.layout.default.template =  layout.vm


4、确定web.xml配置和下面的差不多如下(主要是配置VelocityLayoutServlet,而非VelocityViewServlet):


	<servlet>
		<servlet-name>velocity</servlet-name>
		<servlet-class>
			org.apache.velocity.tools.view.servlet.VelocityLayoutServlet
		</servlet-class>

		<init-param>
			<param-name>org.apache.velocity.toolbox</param-name>
			<param-value>/WEB-INF/toolbox.xml</param-value>
		</init-param>
		<init-param>
			<param-name>org.apache.velocity.properties</param-name>
			<param-value>/WEB-INF/velocity.properties</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>velocity</servlet-name>
		<url-pattern>*.vm</url-pattern>
	</servlet-mapping>


5、运行服务器吧,
a) 访问http://www.xxx.com/vm/user/profile.vm 看看效果。

b) 回到vm/user/profile.vm文件,把#set($layout = "layout.vm")去掉 看看效果。

效果比较:
加上$layout设置的profile.vm文件,浏览该页面时,将自动把该页面变成布局的一部分,把header.vm,sub.vm,footer.vm也输出出来;去掉$layout设置后浏览时,只是输出该页面,不会将header.vm,sub.vm,footer.vm输出出来。

这种功能在调试和编写时非常方便。



以后每增加一个新的页面时,只要在第一行设置了$layout指向一个布局模板便可(注意布局模板的路径,第3步已经做了提示),便可以轻松具有简单的布局功能了



6、后语:

一直想着自己实现一个类似的功能,最后再仔细看看Velocity官方网站时才发现velocity已经有了。我觉得挺好的,很符合我的需求。

所以,如果你使用或即将使用Velocity开发系统,强烈推荐使用layout功能。

参考资料
1、http://velocity.apache.org/tools/devel/view/layoutservlet.html
2、使用velocity吧 :$velocityCount和Tool的使用

分享到:
评论
3 楼 奶油花生 2014-10-23  
那如果我左侧菜单栏也是动态的呢,比如要读一个树形取出来的数据。右侧内荣是树形标题对应的详细。。。
2 楼 jimipage 2007-08-23  
您好,我想问个关于velocity的问题。当访问vm的网页时,我如果统计该页面的访问量呢?并将访问的人数统计到数据库中,我应该如何入手呢?
1 楼 xiang 2007-03-25  
freemarker用的更爽

相关推荐

    velocity-1.7-API文档-中文版.zip

    赠送jar包:velocity-1.7.jar; 赠送原API文档:velocity-1.7-javadoc.jar; 赠送源代码:velocity-1.7-sources.jar; 包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)版.zip 对应Maven信息:...

    velocity-tools-2.0.jar

    velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar velocity-tools-2.0.jar

    velocity-1.7-API文档-中英对照版.zip

    赠送jar包:velocity-1.7.jar 赠送原API文档:velocity-1.7-javadoc.jar 赠送源代码:velocity-1.7-sources.jar 包含翻译后的API文档:velocity-1.7-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:...

    velocity-engine-core-2.3-API文档-中文版.zip

    赠送jar包:velocity-engine-core-2.3.jar 赠送原API文档:velocity-engine-core-2.3-javadoc.jar 赠送源代码:velocity-engine-core-2.3-sources.jar 包含翻译后的API文档:velocity-engine-core-2.3-javadoc-...

    velocity-tools-generic-3.1-API文档-中英对照版.zip

    赠送jar包:velocity-tools-generic-3.1.jar; 赠送原API文档:velocity-tools-generic-3.1-javadoc.jar; 赠送源代码:velocity-tools-generic-3.1-sources.jar; 赠送Maven依赖信息文件:velocity-tools-generic-...

    velocity-tinytest:使用 Tinytest 和 Velocity

    如果你想在你的应用程序中使用 Tinytest 但没有 Velocity,请参阅我的包。安装由于 Velocity 的 API 中的重大更改,此包已从 Atmosphere 中删除。 tinytest包是自动包含的。快速开始将测试添加到tests/tinytest的....

    velocity-tools-1.4.jar

    velocity-tools-1.4.jar

    模板:velocity和freemarker的比较

    模板:velocity和freemarker的比较模板:velocity和freemarker的比较

    velocity-engine-core-2.3-API文档-中英对照版.zip

    赠送jar包:velocity-engine-core-2.3.jar; 赠送原API文档:velocity-engine-core-2.3-javadoc.jar; 赠送源代码:velocity-engine-core-2.3-sources.jar; 赠送Maven依赖信息文件:velocity-engine-core-2.3.pom;...

    Java进阶教程Velocity快速掌握模板引擎视频

    但是遗憾的是 , 市面上并没有一款详细的Velocity教程 , 特别是最新版本的velocity使用, 相关资料更是少的可怜 ! 所以我们这套课程有如下特色 : l 从基础开始 : 只要有一些java开发的基础就可以学习第一部分velocity...

    velocity-site:Apache Velocity网站

    建立网站Apache Velocity使用来构建站点。 使用基于Docker的构建可以自动完成网站构建的整个过程。 您需要的必需软件是: *) -结账,并承诺*)- builder.sh用它来运行Apache CMS生成HTML出了降价的文件*)的文本...

    velocity.js:js 动作插件

    velocity.js$element.velocity({width: "500px", property2: value2}, {/* Velocity's default options */duration: 400,easing: "swing",queue: "",begin: undefined,progress: undefined,complete: undefined,...

    velocity-tools-view-2.0-beta1.jar

    velocity-tools-view-2.0-beta1.jar, 供大家使用

    velocity-tools-view-1.1.jar

    velocity-tools-view-1.1.jar

    struts2整合velocity

    一个简单的struts2 整合 velocity 模板的例子

    generator-velocity:使用 Java Velocity 模板搭建前端 Web 应用程序

    Java Velocity 项目生成器使用 Jave Velocity 模板构建前端 Web 应用程序的生成器。特征CSS 自动前缀带有 LiveReload 的内置预览服务器自动编译 CoffeeScript & Sass 自动 lint 你的脚本自动将图像内联到 css 文件...

    java-velocity-snippets:Sublime Text 23 的 Java Velocity 片段

    用于 Sublime 文本的 Java Velocity 片段瓦尔斯[设置] 设置变量描述:设置变量的方法回程:虚空#set($${ 1 : var } = ${ 2 : " " })[var] 使用 var 描述:写变量的方法$ ! {${ 2 : var }}大批[aa] array.add 描述:...

    velocity-1.7-sources.zip

    2. 源代码生成:Velocity 可以被用来生成 Java 代码、SQL 或者 PostScript。有很多开源和商业开发的软件是使用 Velocity 来开发的。 3. 自动 Email:很多软件的用户注册、密码提醒或者报表都是使用 Velocity 来自动...

    Velocity模板引擎Velocity模板引擎

    Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎Velocity模板引擎

    struts2与velocity集成 实例

    一个很简单容易上手的struts2与velocity集成 实例;很方便初学者进入struts2与velocity集成 学习

Global site tag (gtag.js) - Google Analytics