`
yuanhuiwu
  • 浏览: 88075 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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

阅读更多

有时我们需要定义一些接口模版,让实现这个模版的开发人员遵循我们的设计。例如开发jsp模版时,定义好header,footer,子页面必须实现中间的内容contents.

 

如何才能实现freemarker接口模版,类似Java中的接口,在接口模版中定义一些“方法”,子模版override父模版中的“方法”?

 

其实利用freemarker的宏macro和inlcude指令,就可以达到我们的目的。宏macro已经设计的相当好了,可以带参数等,再加上<#include>指令,接口模版指日可待。

 

接口模版interface.ftl

 

start
< @mid/>
end

 

子模版implement.ftl

<#include "interface.ftl">
< #macro mid>
实现
< /#macro>

 

结果是:

 

start

实现

end

 

绝!

 

接口模版不能单独运行,因为找不到宏<@mid>定义,类似Java中的接口,子模版必须实现宏<@mid>。

子模版使用<#include>指令继承接口模版,并实现了宏<@mid>。

 

你笑了!!@!!@! 这就是接口啊?使用<#assign>在父模版定义一个变量,子模版实现不就可以了!!!

如果你正这样做了,现在的你正如当初的我。

 

想想Java中的变量和方法,<#assign>和<#macro>类似。

 

<#assign>定义和解释是同时进行的,在模版中的位置相当重要!

<#macro>定义和解释是分开的,只有调用时才会解释里面的内容;位置不重要;宏里面可以访问外面定义的变量,也可以使用local指令定义/替换局部变量。

 


所以子模版这样写也是可以的:


< #macro mid>
实现
< /#macro>

<#include "interface.ftl">

Java实现接口都是先implemnts interface,再重写接口方法。所以不推荐第二种写法。

 

顺藤摸瓜,类似Java中的继承, 如果我要开发extends.ftl,继承implement.ftl,我在extends.ftl中也写一个同名的宏< @mid>

 

extends.ftl

 

<#include " implement.ftl ">
< #macro mid>
继承
< /#macro>

 

结果:

 

start

实现

end

 

晕倒!

 

freemarker的宏有一个重要的特性:<#incluce>的模版优先使用自身的宏指令。

 

下一篇《Freemarker模版实现接口和继承(下)》介绍定义一个扩展<#include>标签的宏指令<@extends>,修改freemarker<#include>对宏指令解析的优先顺序 ,达到继承的效果。

1
4
分享到:
评论

相关推荐

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

    总结,Freemarker模版技术提供了丰富的功能,如模板继承、自定义指令等,使得开发者能够灵活地构建动态内容。通过深入理解上述类和接口的工作机制,我们可以更有效地利用Freemarker进行模板设计和开发。

    freemarker模版继承

    扩充freemarker实现模版继承指令,可以实现类似java的继承,模版现在也可以继承了,也可以实现接口.freemarker interface,freemarker extends

    freemarker模板

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

    FreeMarker模板语言API

    - `TemplateModel`:所有数据模型对象都必须实现此接口,以供FreeMarker访问。 4. **数据模型绑定** - `Map`:常用的数据模型,键值对形式,可以通过`ModelData`将Java对象转换为FreeMarker可识别的格式。 - `...

    Freemarker模版开发指南

    模板继承则通过`&lt;#assign&gt;`和`&lt;@parent&gt;`实现,子模板可以继承父模板的结构,然后进行定制。 5. **控制结构** Freemarker提供丰富的控制结构,如条件语句(`&lt;#if&gt;`, `&lt;#elseif&gt;`, `&lt;#else&gt;`)和循环(`&lt;#foreach&gt;`...

    freemarker 自定义freeMarker标签

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

    Spring,Spring Data Jpa,freemarker,bootstrap实现的分页源代码

    在分页应用中,Spring可以用来创建服务层接口和实现,负责与数据库交互,处理分页逻辑。 **Spring Data JPA** 是Spring框架的一个模块,它简化了JPA(Java Persistence API)的使用,使得数据访问更加方便。通过...

    SpringBoot+JPA+Freemarker 生成动态SQL

    3. **配置Repository**:定义一个接口继承自JpaRepository,该接口将自动提供CRUD(创建、读取、更新、删除)操作。也可以自定义更复杂的查询方法。 4. **创建Freemarker模板**:在src/main/resources/templates...

    freemarker的jar包和代码

    - 使用模板继承和导入提高模板复用性。 - 合理配置模板缓存,优化性能。 7. **进阶特性** - **指令**:如`&lt;#assign&gt;`分配变量,`&lt;#import&gt;`导入其他模板。 - **自定义函数**:通过`TemplateMethodModelEx`接口...

    freemarker中文学习资料

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

    activemq+freemarker练习

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

    FreeMarker入门指南API文档(中文版)

    3. 使用模板继承和导入(`#import`)来复用和组织模板片段。 **错误处理** FreeMarker会在遇到错误时抛出异常,如模板语法错误、数据模型缺失等。你应该捕获这些异常,并提供有意义的错误信息给用户。 总之,...

    Spring 使用Freemarker发送邮件的一个简单模板(代码不完整)

    标题“Spring使用Freemarker发送邮件的一个简单模板”指的是通过Spring的JavaMailSender接口和Freemarker模板来生成和发送邮件。首先,我们需要在项目中引入Spring和Freemarker的相关依赖,确保能够使用这两个库的...

    Freemarker 自定义标签 简单案例

    1. **编写Java类**:你需要定义一个处理自定义标签的Java类,这个类需要继承`freemarker.template.TemplateDirectiveModel`接口,并实现其方法。在这个类中,你可以编写处理逻辑,如接收参数、处理数据、生成输出。 ...

    freemarker及jeecms标签使用学习文档

    - **模板继承**:通过`&lt;#assign&gt;`和`&lt;#macro&gt;`实现模板的复用和扩展,`&lt;#import&gt;`和`&lt;#namespace&gt;`处理命名空间。 - **内置对象**:如`request`、`session`、`application`等,可以直接在模板中访问HTTP上下文中的...

    Freemarker中文手册+教程(史上最全API)

    Freemarker是一款强大的模板引擎,常用于Web应用中的视图层,实现动态内容的生成。它采用声明式编程,使得开发者可以专注于数据的处理,而不用关心如何将数据呈现到页面上。本资源包含了Freemarker的中文手册和教程...

    springboot整合redis集群、freemarker模板和多索引库solr,同时将redis集群作mybatis的二级缓存

    - 自定义的MyBatis缓存实现,继承自`Cache`接口,利用Spring Data Redis操作Redis。 - Spring Boot的Controller层,负责接收请求并调用Service层处理业务逻辑。 - Service层,其中包含使用MyBatis和Solr进行数据操作...

    手动创建 SpringMvc +SpringDataJpa+Hibernate+ freemarker mavenProject+ 环境切换 webDemo

    在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...

    freemarker-2.3.23-中文手册.zip

    在Freemarker的API方面,我们可以看到一系列的类和接口,如`Configuration`用于设置Freemarker的全局配置,`Template`表示一个模板文件,`Environment`提供了模板执行时的上下文信息。开发者还可以通过`...

    实现通过jfinal框架自动扫描freemarker的自定义标签.zip

    1. **创建自定义标签库**:定义一个Java类作为自定义标签的处理器,继承自`freemarker.template.TemplateDirectiveModel`接口,并实现其方法。在这个类中,你可以编写处理标签逻辑的代码。 2. **配置扫描路径**:...

Global site tag (gtag.js) - Google Analytics