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

扩展freemarker,实现模板的继承

阅读更多

 

现扩展freemarker,新增加三个指令: @extends,@block,@override

 

一.目的

 

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

 

二.继承概榄

父模板: base.ftl

 

<html>
	<head>
		<@block name="head">base_head_content</@block>
	</head>
	<body>
		<@block name="body">base_body_content</@block>
	</body>
</html>

 

 

子模板child.ftl

 

<@override name="body">
	<div class='content'>
		Powered By rapid-framework
	</div>
</@override>
<@extends name="base.flt"/>

 

 

子模板child.ftl输出

 

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

 可以看到,body部分被重定义了,而head部分则还是显示父模板的内容。

 

三.指令介绍

 

 

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

四.使用说明

 

要使用如上三个自定义指令,必须在freeemarker的Configuration中注册。

使用如下代码:

 

configuration.setSharedVariable("block", new BlockDirective());
configuration.setSharedVariable("override", new OverrideDirective());
configuration.setSharedVariable("extends", new ExtendsDirective());
 

 

以上三个指令属于rapid-framework的扩展,后续新版本发布将包含该项扩展,敬请关注。
具体指令源码请查看:




 

 

分享到:
评论
6 楼 gllfeixiang 2012-12-20  
太有用了,说的太详细了,感谢
5 楼 yuanhuiwu 2011-07-27  
我翻了freemarker的源代码,找到一个比你更好的实现模版接口和继承,请看
http://yuanhuiwu.iteye.com/
见笑
4 楼 walle1027 2009-12-30  
这个挺方便,省了重写好多模版的麻烦,有没有试过用freemarker写个grid的宏?
3 楼 colorless 2009-12-23  
你用的freemarker的版本好像比较老了。
2 楼 badqiu 2009-12-23  
灵感来源于python django.
django的模板中布局方面最好用的一个功能。
继承的关系易于理解。我还扩展了velocity,也可以实现继承,后面会介绍。
1 楼 超级潜水员 2009-12-22  
支持,以前在common template看到过这个功能。
觉得不错,但现在common template好久没有更新了。

相关推荐

    基于Springboot +activiti实现的一个前后端分离的企业级OA管理系统(源码+数据库)

    rapid-core 扩展freemarker实现了模板继承 ## 2. 闪现消息 &gt; 在Spring MVC中,被@RequestMapping注解的方法,可以接收 &gt; RedirectAttributes ra参数,通过ra.addFlashAttribute(key,value) &gt; 可以向模板文件中...

    JEECMS 2.3.1 Beta 系统程序

    在JEECMS v2.3.1中,我们新增了一套官方模板,新模板以红色为主,更加大气美观,同时也保留了原来的模板,用户可以通过切换模板方案实现整个网站的换肤工作。 二、轻松建立并管理多站点,全站实现单点登录 在v...

    struts项目学习笔记

    允许POJO(Plain Old Java Objects,简单javabean对象,没有继承,没有实现,getter,setter方法)对象 作为Action,没有耦合 Action的execute 默认方法不再与Servlet API耦合,更易测试 支持更多视图技术(JSP(转译java...

    JFinal(JAVA 极速WEB ORM框架 ) v3.2.zip

    6、添加 IDbProFactory,支持继承 DbPro 来定制 DbPro 功能 7、文件上传支持input域使用同名name属性 JFinal有如下主要特点 MVC架构,设计精巧,使用简单 遵循COC原则,零配置,无xml 独创Db Record模式,灵活...

    好用的代码生成源码

    基于FreeMarker模板语言,并且模板易于修改 基于数据库,内建好数据库的model,并支持多种数据库(mysql,sql server,oracle测试通过) 半手工方式,生成的代码放在某个目录,再手工拷贝回来工作区 易于做二次开发,整个生成...

    达内java培训目录

    Struts2 Struts2核心控制流程、Ognl、Action、Interceptor、Result、FreeMarker、Struts2标记库、Struts2扩展、Struts2应用技巧(输入验证、消息国际化、文件上传和下载、防止重复提交等)。 熟练掌握Struts2核心...

    Struts2 in action中文版

    8.3.2 FreemarkerResult,也叫做freemarker 191 8.4 全局结果 192 8.5 小结 193 第四部分 完善应用程序 第9章 集成Spring和Hibernate/JPA 196 9.1 为什么在Struts 2中使用Spring 196 9.1.1 依赖注入能做些什么 197 ...

    struts2讲义_吴峻申

    4.3.1 扩展拦截器接口的自定义拦截器配置 54 4.3.2 继承抽象拦截器的自定义拦截器配置 56 4.3.3 继承方法拦截器的自定义拦截器配置 58 4.4 Struts2文件上传拦截器应用 61 4.4.1 Struts2文件上传功能开发 61 4.4.2 ...

    MCMS内容管理系统 v4.5.2.zip

    终端统一: 铭飞MCMS支持PC与MOBILE皮肤定制,同时使用MS团队移动JS插件,轻松实现手机多屏幕适配,想想看你发布的信息第一时间在PC上展示又能在手机上展示,这是件多么幸福的事情,数据统一、平台统一、终端统一是MS团队...

    Spring 2.0 开发参考手册

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...

    springboot参考指南

    继承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...

    单点登录源码

    通用用户管理系统, 实现最常用的用户注册、登录、资料管理、个人中心、第三方登录等基本需求,支持扩展二次开发。 &gt; zheng-wechat-mp 微信公众号管理平台,除实现官网后台自动回复、菜单管理、素材管理、用户管理...

    Spring中文帮助文档

    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/...

    Spring API

    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. ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    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. 用...

    spring chm文档

    3.6. bean定义的继承 3.7. 容器扩展点 3.7.1. 用BeanPostProcessor定制bean 3.7.2. 用BeanFactoryPostProcessor定制配置元数据 3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用...

Global site tag (gtag.js) - Google Analytics