扩展Velocity,实现模板的继承
文章分类:Java编程
与我之前的扩展freemarker类似,现新增加三个指令:block,override,extends
一.目的:
父模板页面定义好布局,子模板可以重定义布局中的部分内容
使模板可以实现类似"类"的继承关系,并不限继承层次
二.继承概榄:
父模板:base.vm
Html代码
<html>
<head>
#block("head")
base_head_content
#end
</head>
<body>
#block("body")
base_body_content
#end
</body>
</html>
<html>
<head>
#block("head")
base_head_content
#end
</head>
<body>
#block("body")
base_body_content
#end
</body>
</html>
子模板: child.vm
Html代码
#override("body")
<div class='content'>
Powered By rapid-framework
</div>
#end
#extends("base.vm")
#override("body")
<div class='content'>
Powered By rapid-framework
</div>
#end
#extends("base.vm") 子模板child.vm输出
Html代码
<html>
<head>
base_head_content
</head>
<body>
<div class='content'>
Powered By rapid-framework
</div>
</body>
</html>
<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中可以设置:
Html代码
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);
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
Java代码
file.resource.loader.cache = true
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,编写自定义指令以满足特定需求。 7. **最佳实践** - 尽量避免在模板中进行复杂的逻辑处理,保持模板简洁。 - 合理使用`#set`指令,避免全局变量污染。 - 使用`#macro`定义...
6. **指令**: 自定义的模板语言元素,可以通过扩展Velocity来增加新的功能。 **Velocity在Web开发中的应用** 在Web开发中,Velocity常用于生成动态内容,例如网页、电子邮件等。开发者可以在控制器层处理业务逻辑...
- **自定义指令(Custom Directives)**:如果内置的指令不能满足需求,你可以创建自定义指令,扩展Velocity的功能。 - **模板的继承与包含(Template Inheritance and Includes)**:通过`#include`和`#macro`指令...
- **自定义指令(Directives)**:你可以通过扩展 Velocity,实现自定义的 VTL 指令,满足特定需求。 - **事件处理器(Event Handlers)**:Velocity 提供了一套事件处理机制,允许你在模板解析和渲染过程中进行...
而自定义指令则允许扩展Velocity的功能。 8. **调试与优化** 当模板出现问题时,Velocity提供了一些工具和日志选项来帮助调试。可以调整日志级别以获取更详细的错误信息,或使用`#set()`指令来检查变量的值。 ...
通过研究"velocity-1.6.3_Src_jar"的源代码,开发者可以深入了解其内部实现机制,包括模板的解析过程、指令的执行逻辑以及上下文管理等,这对于优化性能、解决兼容性问题或者扩展Velocity功能都有极大的帮助。...
《Spring Boot整合Velocity模板引擎详解》 ...在实际项目中,可以根据需要扩展Velocity的功能,例如引入自定义指令、宏库等,进一步提升开发效率。同时,这种分离的模式也有利于团队协作,提高代码的可维护性。
4. **自定义指令**:通过实现 `org.apache.velocity.app.VelocimacroFactory` 接口,可以扩展 Velocity 提供自定义的模板指令。 在实际应用中,Velocity 常常与 Spring MVC 或 Struts 等框架结合使用,作为视图层的...
3. **自定义指令**:可以通过扩展 Velocity,添加自定义的模板指令。 4. **国际化支持**:Velocity 支持多语言,可以轻松地切换不同的语言环境。 总的来说,Velocity 是一个强大且灵活的模板引擎,它的简单易用性和...
例如,自定义指令允许你扩展Velocity的功能,而宏库可以将常用的模板代码封装起来,提高复用性。 总的来说,Velocity提供了一种强大的方式来生成动态内容,其简洁的语法和灵活的架构使其成为Java Web开发中的有力...
- **EventCartridge and Event Handlers**:详细解释了事件分发和处理的概念,用于扩展Velocity的功能。 - **Using the EventCartridge**:展示了如何使用EventCartridge来注册事件处理器。 8. **配置参数** - *...
2. **自定义工具**:介绍如何创建和集成自定义工具库,扩展Velocity的功能,比如日期处理、数学运算等。 3. **模板库和最佳实践**:分享了常见的模板设计模式和经验,帮助开发者构建高效、灵活的模板结构。 4. **...
- 开发者指南:详细讲解如何扩展Velocity,包括宏的创建、自定义指令等。 - API参考:列出所有可用的类、方法和接口,便于开发过程中查阅。 2. **例子**: 示例代码可以帮助初学者快速上手,理解Velocity的基本...
源代码则可以用于深入理解 Velocity 内部的工作机制,对于定制或扩展 Velocity 功能非常有用。 总的来说,Velocity 是一种强大的模板引擎,适合用于生成各种动态内容,如电子邮件、报告或 Web 页面。通过熟练掌握 ...
2. **高度可定制**: 通过自定义工具(Velocity Tools)和宏库(Velocity Macro Library),开发者可以扩展 Velocity 功能,实现更复杂的需求。 3. **分离关注点**: Velocity 将显示逻辑从业务逻辑中分离出来,使得...
同时,由于其可扩展性,开发者可以通过自定义指令或事件处理器来扩展Velocity的功能。 总的来说,Velocity_jar包是Java Web开发中的一个重要工具,它简化了动态内容的生成过程,提高了代码的可维护性和易读性。如果...
EventCartridge和事件处理器提供了扩展Velocity功能的方式,可以注册自定义的事件处理代码来拦截和修改模板的处理流程。 10. **Velocity配置参数** Velocity配置键值说明涵盖了如log4j配置、资源加载器设置等,...
3. **可扩展性**:用户可以通过自定义宏(macro)和指令(directive)来扩展 Velocity 的功能,满足不同的开发需求。 4. **易于集成**:Velocity 可以轻松地与其他 Java 应用程序框架集成,如 Struts、Spring 等。 ...
- **事件处理器**:介绍如何使用事件处理器来扩展Velocity的功能。 - **使用事件分发器**:提供一个具体例子,展示如何配置和使用事件分发器。 #### 十、Velocity配置参数 - **Runtime Log**:描述如何配置Velocity...