`
badqiu
  • 浏览: 674525 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

扩展Velocity,实现模板的继承

阅读更多

与我之前的扩展freemarker类似,现新增加三个指令:block,override,extends

一.目的:

  • 父模板页面定义好布局,子模板可以重定义布局中的部分内容
  • 使模板可以实现类似"类"的继承关系,并不限继承层次

二.继承概榄:

父模板:base.vm

<html>
<head>
	#block("head") 
		base_head_content 
	#end 
</head>
<body> 
	#block("body") 
		base_body_content 
	#end
</body>
</html>

 

子模板: child.vm

#override("body")
	<div class='content'>
		Powered By rapid-framework
	</div> 
#end
#extends("base.vm")

 子模板child.vm输出

 

<html>
	<head>
		base_head_content 
	</head>
<body> 
	<div class='content'>
		Powered By rapid-framework
	</div> 
</body>
</html>

 可以看到,输出中body部分被子模板重定义(override)了,而head部分则还是显示父模板(block)中的内容。

 

 

三.指令介绍:

  • #block : 定义块,可以被子模板用#override指令覆盖显示
  • #override :  覆盖#block指令显示的内容
  • #extends : 继承其它模板,必须放在模板的最后面(注:该指令完全等价于#parse指令,只是为了提供统一的语义,即extends比parse更好理解)

四.使用说明:

在velocity的properties中可以设置:

userdirective=cn.org.rapid_framework.velocity.directive.BlockDirective,cn.org.rapid_framework.velocity.directive.OverrideDirective,cn.org.rapid_framework.velocity.directive.ExtendsDirective
然后再初始化,即中使用自定义指令:
velocityEngine.init(properties);

使用注意(关乎性能):

   必须为velocity的ResourceLoader开启cache,因为 engine.getTemplate(name) 默认是没有使用cache的,而#extends是需要经常调用该函数,所以必须为ResourceLoader指定开启cache,如FileResourceLoader

file.resource.loader.cache = true
 

 

以上三个指令属于rapid-framework的扩展,后续新版本发布将包含该项扩展,敬请关注。
具体指令源码请查看:
http://rapid-framework.googlecode.com/svn/trunk/rapid-framework/src/rapid_framework_common/cn/org/rapid_framework/velocity/directive/

2
2
分享到:
评论
7 楼 innerp 2013-02-11  
badqiu 写道
innerp 写道
楼主 不错! 其实可以借鉴django 模板引擎 就用一个block标签就行了!override 标签可以不需要


这个本身就是django的移植,只有一个block标签,你可以试试. 在现有框架较难,都是使用技巧做到的.

嗯 好 我去看看实现
6 楼 badqiu 2013-01-26  
innerp 写道
楼主 不错! 其实可以借鉴django 模板引擎 就用一个block标签就行了!override 标签可以不需要


这个本身就是django的移植,只有一个block标签,你可以试试. 在现有框架较难,都是使用技巧做到的.
5 楼 innerp 2013-01-25  
楼主 不错! 其实可以借鉴django 模板引擎 就用一个block标签就行了!override 标签可以不需要

4 楼 Wuaner 2012-10-18  
rapid-framework,不错的东西,博主辛苦
3 楼 bangyan2003 2009-12-29  
这个也扩展了啊 赫赫
2 楼 badqiu 2009-12-28  
1.性能差距, 现该实现可以发挥velocity模板原生的最大性能
2.继承的概念易于理解.
1 楼 neptune 2009-12-28  
和sitemesh比优势?

相关推荐

    Velocity实现模板(详细步奏)

    Velocity 还支持模板继承和导入,允许创建基模板并由子模板覆盖或扩展,以实现模板的复用和定制。此外,Velocity 提供了丰富的工具和库,如 VelocityTools,来增强其功能,如国际化支持、日期/时间处理等。 总之,...

    Velocity简单案例

    7. **模板继承与导入**: Velocity支持模板的继承和导入,这样可以创建可重用的布局和部分。例如,一个基模板定义通用的页眉和页脚,子模板通过`#extend`继承基模板,并在适当位置添加自定义内容。 8. **宏库和...

    Velocity

    4. **模板继承**:Velocity支持模板继承,子模板可以继承父模板的结构,并在其基础上进行扩展和定制。 5. **指令集**:Velocity提供了一系列内置指令,如#set、#if、#foreach等,用于控制模板的逻辑流程。 6. **可...

    velocity 1.5

    5. **模板继承与包含**:Velocity 支持模板继承和包含,这意味着一个模板可以继承另一个模板的布局,只覆盖需要改变的部分,或者在一个模板中嵌入另一个模板的内容,增强了模板的复用性。 6. **宏**:Velocity 提供...

    velocity入门使用教程

    - **自定义指令(Custom Directives)**:如果内置的指令不能满足需求,你可以创建自定义指令,扩展Velocity的功能。 - **模板的继承与包含(Template Inheritance and Includes)**:通过`#include`和`#macro`指令...

    Mastering Apache Velocity

    6. **模板继承(Template Inheritance)**:Velocity支持模板继承,允许创建一个基础模板,然后其他模板可以通过扩展这个基础模板来继承其内容和结构,只修改特定的部分,提高模板设计的灵活性和一致性。 7. **...

    Velocity 和 FreeMarker区别

    - **FreeMarker**支持强大的模板继承和包含机制,能够更好地组织代码结构。 - **Velocity**在这方面也有所支持,但不如FreeMarker灵活。 #### 四、性能与效率 从性能角度来看,**Velocity**和**FreeMarker**都...

    Struts+Velocity整合示例(含源码)

    3. `Velocity模板文件`: `.vm`扩展名的文件,包含VTL代码,用于生成动态HTML。 4. `web.xml`: Web应用的部署描述符,配置Struts2的过滤器和初始化参数。 通过阅读源码,我们可以学习如何配置Struts2与Velocity的...

    velocity document

    2. **灵活性**:Velocity的宏功能相对强大,更易于复用和扩展,而Freemarker的模板继承和导入功能则更灵活。 3. **性能**:两者在性能上各有千秋,具体取决于应用场景和优化程度。 **三、Velocity的上下文和模型**...

    Velocity Sample

    4. **模板继承**:了解如何使用 Velocity 的模板继承机制来减少重复代码。 5. **MVC模式应用**:理解 Velocity 如何与 Model 和 Controller 配合工作,实现 MVC 设计模式。 通过深入研究这些示例,你不仅可以提升对...

    velocity开发必备(中文指南+精通Velociy)

    1. **模板继承**:讲解了如何通过模板继承来实现页面布局的复用,以及如何定义和覆盖父模板的块。 2. **自定义工具**:介绍如何创建和集成自定义工具库,扩展Velocity的功能,比如日期处理、数学运算等。 3. **...

    Velocity 文档

    4. **模板继承与导入**:Velocity支持模板的继承和导入,这意味着一个模板可以继承或引用另一个模板的结构,从而实现代码复用和模块化设计。 5. **模板设计最佳实践**:文档可能会提供关于如何编写清晰、可读性强的...

    velocity+struts2实例,适合开发和整合使用

    同时,Velocity模板可以通过宏定义和模板继承来减少重复代码,提高代码复用率。 **文件列表分析:** 尽管没有提供具体的文件列表,但在一个典型的"velocity+struts2"实例中,我们可以预期包含以下类型的文件: 1. ...

    当前流行的模板引擎效率分析(velocity,freeMarker,Smarty4j,httl)

    它提供了丰富的内置函数和操作符,支持缓存和模板继承。Smarty4j强调了模板的清晰性和可维护性,但在性能上可能不及FreeMarker和Velocity,因为它的编译过程可能稍慢。 4. HTTL: HTTL(Hight Template for Java)...

    Velocity学习资料

    7. **模板继承和导入**:了解如何使用`#set`指令设置变量,以及如何利用模板继承和导入来简化模板结构。 8. **工具箱的使用**:深入研究Velocity Tools,熟悉不同工具的功能,并在实际项目中应用它们。 9. **最佳...

    velocity.pdf

    Velocity模板通常以`.vm`作为扩展名,其中包含特定的指令来引用数据模型中的变量或执行逻辑控制。 示例模板: ```vm #set($name = "张三") &lt;!DOCTYPE html&gt; $!name 的主页 欢迎来到 $!name 的主页! ``` #...

    JAVA中Velocity语法基础.pdf

    在文档中提及的Velocity Turbine是Velocity的一个扩展,它允许使用Velocity模板作为Web应用的一部分,以实现页面内容的动态生成。通过学习和掌握Velocity模板语法,开发者可以在项目中创建更加动态和可维护的Web应用...

    velocity学习资料

    7. **模板继承**: Velocity支持模板继承,子模板可以通过`#parse`或`#include`指令包含父模板,实现代码重用和页面结构的统一。 8. **宏(Macros)**: 宏是可复用的VTL代码段,可以封装常用的功能或UI组件,提高开发...

    velocity入门使用

    例如,自定义指令允许你扩展Velocity的功能,而宏库可以将常用的模板代码封装起来,提高复用性。 总的来说,Velocity提供了一种强大的方式来生成动态内容,其简洁的语法和灵活的架构使其成为Java Web开发中的有力...

    Velocity入门教程实例

    使用Velocity模板,可以通过简单的模板语言引用Java对象,这有助于维护Web站点的长期可扩展性。 ### Velocity模板语言的基本语法: 1. 声明:使用#set指令来设置变量。例如:`#set($var="value")`。变量可以是变量...

Global site tag (gtag.js) - Google Analytics