`
badqiu
  • 浏览: 673889 次
  • 性别: 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好久没有更新了。

相关推荐

    Freemarker模版实现接口和继承(下)

    开发者可以通过继承这个抽象类并实现必要的方法来自定义自己的模板指令,扩展Freemarker的功能。这些自定义指令可以处理特定的业务逻辑,增加模板语言的表达力。 5. **MixedContentWrapper.java 和 MacroWrapper....

    freemarker模板

    4. **模板继承和导入**: 使用`&lt;#include&gt;`和`&lt;#import&gt;`,可以实现模板的复用和模块化。模板继承允许子模板继承父模板的结构,只需覆盖特定部分。 5. **注释**: 在FreeMarker中,`&lt;!--#--&gt;`用于HTML注释,`...

    freemarker模板使用

    5. **模板继承与导入**: - **继承(Inheritance)**:使用`&lt;#assign base="base.ftl"&gt;`指定父模板,子模板可以覆盖或扩展父模板的内容。 - **导入(Import)**:`&lt;#import "common.ftl" as common&gt;`引入其他模板...

    使用freemarker扩展struts标签

    扩展Struts2的标签库意味着创建自定义的标签,这些标签可以嵌入到FreeMarker模板中,以提供更高级别的抽象和可重用性。这通常涉及到创建自定义的Action、模型类和标签库定义文件(TLD)。 在给定的文件列表中,我们...

    freemarker-2.3.28.jar

    9. **模板继承与布局**: Freemarker支持模板继承,通过`&lt;#include&gt;`和`&lt;#assign&gt;`等指令,可以创建基础模板并由子模板进行扩展,实现页面布局的统一。 10. **函数和方法调用**: FTL中可以调用Java方法,这使得模板...

    freemarker 自定义freeMarker标签

    总的来说,自定义FreeMarker标签是提高模板引擎灵活性和扩展性的有效方式,也是Java开发中的一个重要技能。通过深入理解FreeMarker的工作原理和API,开发者可以构建出更强大、更符合项目需求的模板解决方案。

    freemarker

    7. **模板继承(Template Inheritance)**:通过`&lt;#include&gt;`和`&lt;#macro&gt;`,你可以实现模板的复用和继承,提高代码的可维护性。 8. **宏(Macros)**:类似于函数,宏是可重用的代码片段,可以在多个地方调用。 9....

    FreeMarker手册.pdf

    7. **模板继承与导入**:FreeMarker支持模板继承,通过`&lt;#include&gt;`和`&lt;#macro&gt;`指令,可以实现模板的复用和模块化设计。这有助于保持代码的整洁和一致性。 8. **日期和数字格式化**:FreeMarker允许对日期和数字...

    freemarker中文学习资料

    - **模板继承**:使用`&lt;#import&gt;`和`&lt;#include&gt;`指令可以引入其他模板,实现模板的复用。 - **布局模板**:通过`&lt;#assign&gt;`和`&lt;@...&gt;`指令,可以定义布局模板,实现模板的统一风格。 6. **Freemarker与Spring集成...

    freemarker代码

    - 学习Freemarker的模板继承和导入,这有助于代码复用和组织。 - 理解Freemarker的内置指令和函数,如`&lt;#list&gt;`、`&lt;#escape&gt;`等,这些工具可以帮助你编写更复杂的模板。 - 探索Freemarker的高级特性,如宏和自定义...

    freemarker-2.2.8.zip

    此外,Freemarker支持模板继承,子模板可以继承父模板的部分内容,并在其基础上进行扩展和覆盖。 总的来说,"freemarker-2.2.8.zip"是一个包含Freemarker 2.2.8版本源码和资源的压缩包,适合开发者研究其内部实现,...

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

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

    struts2-freemarker

    4. **分离关注点**:FreeMarker模板允许开发者专注于视图的布局,而将业务逻辑保留在Java代码中,实现了视图和逻辑的解耦。 **Struts2与FreeMarker整合**: 1. **视图渲染**:Struts2 Action执行完成后,可以通过...

    freemarker-2.3.23jar

    5. **模板继承和导入**:通过`&lt;#import&gt;`和`&lt;#extends&gt;`,模板可以引用其他模板,实现代码复用和模块化设计。 6. **缓存机制**:Freemarker支持缓存机制,可以提高性能,减少不必要的模板解析和编译。 7. **国际化...

    freemarker编辑插件

    FreeMarker是一款强大的、开源的模板引擎,主要用于...总之,FreeMarker编辑插件是提升开发效率和代码质量的重要工具,它通过丰富的特性帮助开发者更好地驾驭FreeMarker模板语言,实现更高效、更可靠的Web应用开发。

    struts2中使用freeMarker

    - FreeMarker模板通常以`.ftl`为扩展名,存储在项目中的`WEB-INF/template`目录下。 - 模板文件包含静态HTML和动态控制结构,如`&lt;#if&gt;`、`&lt;#foreach&gt;`等,用于根据模型数据动态生成内容。 3. **Action与模型数据*...

    FreeMarker文档.CHM

    8. **模板继承**:使用`&lt;#assign&gt;`和`&lt;#macro&gt;`,可以创建可重用的模板片段和宏,实现模板的模块化。 9. **模板调试**:FreeMarker提供了丰富的日志和错误处理机制,便于在开发过程中调试模板问题。 10. **与Web...

    Freemarker教程(中文版)

    教程还会深入讲解Freemarker的高级特性,如宏、指令、模板继承和布局等,这些都是构建复杂模板结构的关键。 学习Freemarker时,实践是检验理解的最佳方式。尝试创建简单的项目,用Freemarker实现动态页面,逐步熟悉...

    activemq+freemarker练习

    3. **模板继承**:通过`&lt;#include&gt;`指令,可以实现模板的继承和复用,提高代码的可维护性。 4. **国际化支持**:FreeMarker支持多语言环境,方便进行国际化(i18n)处理。 5. **预编译功能**:可以预先编译模板,...

    Freemarker 自定义标签 简单案例

    在提供的"TestFreemarkerDiy"示例中,可能包含了一个简单的自定义标签实现以及一个演示如何使用该标签的Freemarker模板文件。通过分析这个示例,我们可以学习如何在实际项目中应用自定义标签,以提高模板的可维护性...

Global site tag (gtag.js) - Google Analytics