`
chenpingtai2008
  • 浏览: 58731 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

扩展Velocity

阅读更多
扩展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的学习资料

    - 自定义指令:可以通过扩展Velocity,编写自定义指令以满足特定需求。 7. **最佳实践** - 尽量避免在模板中进行复杂的逻辑处理,保持模板简洁。 - 合理使用`#set`指令,避免全局变量污染。 - 使用`#macro`定义...

    Velocity用户手册(中文)

    6. **指令**: 自定义的模板语言元素,可以通过扩展Velocity来增加新的功能。 **Velocity在Web开发中的应用** 在Web开发中,Velocity常用于生成动态内容,例如网页、电子邮件等。开发者可以在控制器层处理业务逻辑...

    velocity入门使用教程

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

    velocity 配置jar包

    - **自定义指令(Directives)**:你可以通过扩展 Velocity,实现自定义的 VTL 指令,满足特定需求。 - **事件处理器(Event Handlers)**:Velocity 提供了一套事件处理机制,允许你在模板解析和渲染过程中进行...

    Velocity入门小实例,纯java工程

    而自定义指令则允许扩展Velocity的功能。 8. **调试与优化** 当模板出现问题时,Velocity提供了一些工具和日志选项来帮助调试。可以调整日志级别以获取更详细的错误信息,或使用`#set()`指令来检查变量的值。 ...

    velocity-1.6.3_Src_jar.zip

    通过研究"velocity-1.6.3_Src_jar"的源代码,开发者可以深入了解其内部实现机制,包括模板的解析过程、指令的执行逻辑以及上下文管理等,这对于优化性能、解决兼容性问题或者扩展Velocity功能都有极大的帮助。...

    92.Spring Boot使用模板velocity【从零开始学Spring Boot】

    《Spring Boot整合Velocity模板引擎详解》 ...在实际项目中,可以根据需要扩展Velocity的功能,例如引入自定义指令、宏库等,进一步提升开发效率。同时,这种分离的模式也有利于团队协作,提高代码的可维护性。

    velocity 简单实例

    4. **自定义指令**:通过实现 `org.apache.velocity.app.VelocimacroFactory` 接口,可以扩展 Velocity 提供自定义的模板指令。 在实际应用中,Velocity 常常与 Spring MVC 或 Struts 等框架结合使用,作为视图层的...

    模板引擎 Velocity

    3. **自定义指令**:可以通过扩展 Velocity,添加自定义的模板指令。 4. **国际化支持**:Velocity 支持多语言,可以轻松地切换不同的语言环境。 总的来说,Velocity 是一个强大且灵活的模板引擎,它的简单易用性和...

    velocity入门使用

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

    《Velocity1.4 java开发指南》中文版

    - **EventCartridge and Event Handlers**:详细解释了事件分发和处理的概念,用于扩展Velocity的功能。 - **Using the EventCartridge**:展示了如何使用EventCartridge来注册事件处理器。 8. **配置参数** - *...

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

    2. **自定义工具**:介绍如何创建和集成自定义工具库,扩展Velocity的功能,比如日期处理、数学运算等。 3. **模板库和最佳实践**:分享了常见的模板设计模式和经验,帮助开发者构建高效、灵活的模板结构。 4. **...

    velocity-1.6.1官方开发包

    - 开发者指南:详细讲解如何扩展Velocity,包括宏的创建、自定义指令等。 - API参考:列出所有可用的类、方法和接口,便于开发过程中查阅。 2. **例子**: 示例代码可以帮助初学者快速上手,理解Velocity的基本...

    velocity 引擎 资源包

    源代码则可以用于深入理解 Velocity 内部的工作机制,对于定制或扩展 Velocity 功能非常有用。 总的来说,Velocity 是一种强大的模板引擎,适合用于生成各种动态内容,如电子邮件、报告或 Web 页面。通过熟练掌握 ...

    Velocity Demo

    2. **高度可定制**: 通过自定义工具(Velocity Tools)和宏库(Velocity Macro Library),开发者可以扩展 Velocity 功能,实现更复杂的需求。 3. **分离关注点**: Velocity 将显示逻辑从业务逻辑中分离出来,使得...

    案例中用到的Velocity_jar包

    同时,由于其可扩展性,开发者可以通过自定义指令或事件处理器来扩展Velocity的功能。 总的来说,Velocity_jar包是Java Web开发中的一个重要工具,它简化了动态内容的生成过程,提高了代码的可维护性和易读性。如果...

    《Velocity java开发指南》中文版

    EventCartridge和事件处理器提供了扩展Velocity功能的方式,可以注册自定义的事件处理代码来拦截和修改模板的处理流程。 10. **Velocity配置参数** Velocity配置键值说明涵盖了如log4j配置、资源加载器设置等,...

    精通Apache Velocity

    3. **可扩展性**:用户可以通过自定义宏(macro)和指令(directive)来扩展 Velocity 的功能,满足不同的开发需求。 4. **易于集成**:Velocity 可以轻松地与其他 Java 应用程序框架集成,如 Struts、Spring 等。 ...

    Velocity_java开发指南

    - **事件处理器**:介绍如何使用事件处理器来扩展Velocity的功能。 - **使用事件分发器**:提供一个具体例子,展示如何配置和使用事件分发器。 #### 十、Velocity配置参数 - **Runtime Log**:描述如何配置Velocity...

Global site tag (gtag.js) - Google Analytics