与我之前的扩展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/
分享到:
相关推荐
Velocity 还支持模板继承和导入,允许创建基模板并由子模板覆盖或扩展,以实现模板的复用和定制。此外,Velocity 提供了丰富的工具和库,如 VelocityTools,来增强其功能,如国际化支持、日期/时间处理等。 总之,...
7. **模板继承与导入**: Velocity支持模板的继承和导入,这样可以创建可重用的布局和部分。例如,一个基模板定义通用的页眉和页脚,子模板通过`#extend`继承基模板,并在适当位置添加自定义内容。 8. **宏库和...
4. **模板继承**:Velocity支持模板继承,子模板可以继承父模板的结构,并在其基础上进行扩展和定制。 5. **指令集**:Velocity提供了一系列内置指令,如#set、#if、#foreach等,用于控制模板的逻辑流程。 6. **可...
5. **模板继承与包含**:Velocity 支持模板继承和包含,这意味着一个模板可以继承另一个模板的布局,只覆盖需要改变的部分,或者在一个模板中嵌入另一个模板的内容,增强了模板的复用性。 6. **宏**:Velocity 提供...
- **自定义指令(Custom Directives)**:如果内置的指令不能满足需求,你可以创建自定义指令,扩展Velocity的功能。 - **模板的继承与包含(Template Inheritance and Includes)**:通过`#include`和`#macro`指令...
6. **模板继承(Template Inheritance)**:Velocity支持模板继承,允许创建一个基础模板,然后其他模板可以通过扩展这个基础模板来继承其内容和结构,只修改特定的部分,提高模板设计的灵活性和一致性。 7. **...
- **FreeMarker**支持强大的模板继承和包含机制,能够更好地组织代码结构。 - **Velocity**在这方面也有所支持,但不如FreeMarker灵活。 #### 四、性能与效率 从性能角度来看,**Velocity**和**FreeMarker**都...
3. `Velocity模板文件`: `.vm`扩展名的文件,包含VTL代码,用于生成动态HTML。 4. `web.xml`: Web应用的部署描述符,配置Struts2的过滤器和初始化参数。 通过阅读源码,我们可以学习如何配置Struts2与Velocity的...
2. **灵活性**:Velocity的宏功能相对强大,更易于复用和扩展,而Freemarker的模板继承和导入功能则更灵活。 3. **性能**:两者在性能上各有千秋,具体取决于应用场景和优化程度。 **三、Velocity的上下文和模型**...
4. **模板继承**:了解如何使用 Velocity 的模板继承机制来减少重复代码。 5. **MVC模式应用**:理解 Velocity 如何与 Model 和 Controller 配合工作,实现 MVC 设计模式。 通过深入研究这些示例,你不仅可以提升对...
1. **模板继承**:讲解了如何通过模板继承来实现页面布局的复用,以及如何定义和覆盖父模板的块。 2. **自定义工具**:介绍如何创建和集成自定义工具库,扩展Velocity的功能,比如日期处理、数学运算等。 3. **...
4. **模板继承与导入**:Velocity支持模板的继承和导入,这意味着一个模板可以继承或引用另一个模板的结构,从而实现代码复用和模块化设计。 5. **模板设计最佳实践**:文档可能会提供关于如何编写清晰、可读性强的...
同时,Velocity模板可以通过宏定义和模板继承来减少重复代码,提高代码复用率。 **文件列表分析:** 尽管没有提供具体的文件列表,但在一个典型的"velocity+struts2"实例中,我们可以预期包含以下类型的文件: 1. ...
它提供了丰富的内置函数和操作符,支持缓存和模板继承。Smarty4j强调了模板的清晰性和可维护性,但在性能上可能不及FreeMarker和Velocity,因为它的编译过程可能稍慢。 4. HTTL: HTTL(Hight Template for Java)...
7. **模板继承和导入**:了解如何使用`#set`指令设置变量,以及如何利用模板继承和导入来简化模板结构。 8. **工具箱的使用**:深入研究Velocity Tools,熟悉不同工具的功能,并在实际项目中应用它们。 9. **最佳...
Velocity模板通常以`.vm`作为扩展名,其中包含特定的指令来引用数据模型中的变量或执行逻辑控制。 示例模板: ```vm #set($name = "张三") <!DOCTYPE html> $!name 的主页 欢迎来到 $!name 的主页! ``` #...
在文档中提及的Velocity Turbine是Velocity的一个扩展,它允许使用Velocity模板作为Web应用的一部分,以实现页面内容的动态生成。通过学习和掌握Velocity模板语法,开发者可以在项目中创建更加动态和可维护的Web应用...
7. **模板继承**: Velocity支持模板继承,子模板可以通过`#parse`或`#include`指令包含父模板,实现代码重用和页面结构的统一。 8. **宏(Macros)**: 宏是可复用的VTL代码段,可以封装常用的功能或UI组件,提高开发...
例如,自定义指令允许你扩展Velocity的功能,而宏库可以将常用的模板代码封装起来,提高复用性。 总的来说,Velocity提供了一种强大的方式来生成动态内容,其简洁的语法和灵活的架构使其成为Java Web开发中的有力...
使用Velocity模板,可以通过简单的模板语言引用Java对象,这有助于维护Web站点的长期可扩展性。 ### Velocity模板语言的基本语法: 1. 声明:使用#set指令来设置变量。例如:`#set($var="value")`。变量可以是变量...