与我之前的扩展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/
分享到:
相关推荐
如果想生成未预置的代码,如vo对象、前端vue页面以及其他自定义代码等,需要做一些定制和扩展来实现。 从使用角度而言,官方资料介绍得比较简要,要实际使用,仍然需要进行具体的尝试和摸索,包括必要时看下源码...
允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,没有实现,getter,setter方法)对象 作为Action,没有耦合 Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java...
6、添加 IDbProFactory,支持继承 DbPro 来定制 DbPro 功能 7、文件上传支持input域使用同名name属性 JFinal有如下主要特点 MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db Record模式,灵活...
4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的自定义拦截器配置 58 4.4 Struts2文件上传拦截器应用 61 4.4.1 Struts2文件上传功能开发 61 4.4.2 ...
8.3.1 VelocityResult,也叫做velocity 189 8.3.2 FreemarkerResult,也叫做freemarker 191 8.4 全局结果 192 8.5 小结 193 第四部分 完善应用程序 第9章 集成Spring和Hibernate/JPA 196 9.1 为什么在Struts 2中...
3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...
Velocity | 模板引擎 | [http://velocity.apache.org/](http://velocity.apache.org/) ZooKeeper | 分布式协调服务 | [http://zookeeper.apache.org/](http://zookeeper.apache.org/) Dubbo | 分布式服务框架 | ...
继承starter parent ii. 13.1.2. 使用没有父POM的Spring Boot iii. 13.1.3. 改变Java版本 iv. 13.1.4. 使用Spring Boot Maven插件 ii. 13.2. Gradle iii. 13.3. Ant iv. 13.4. Starter POMs ii. 14. 组织你的代码 i...
14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...
3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. ...
3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.1.1. 使用BeanPostProcessor的Hello World示例 3.7.1.2. RequiredAnnotationBeanPostProcessor示例 3.7.2. 用...
3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...