`

关于Freemarker模板编写

阅读更多
Freemarker 标签有不少,但是项目里用到的并不是很多。我在这里只举几个简单常用的列子..

1.if...else...if
  如果A为空,生成Part1反之生成Part2
  <#if (A=='')>   当然这里可以换成其他条件,这里就不一一阐述了
     Part1

  <#else>
    Part1
  </#if>

2.List循环标签
  <#list yourList as pageList>
      ${pageList.属性}
  </#list>
  yourList <----你封装在Map中的对象的Key
  pageList <----别名
  通过${pageList.属性}可以显示出,你封装在pageList中的那些值
  还记得上一篇文章讲到的数据模型中的Map类型吗?要在页面上获取自己封装的List的话.
  把List到put到Map里面就行了.
  template.process(map, out);<-----最后一步会把Map中所有的数据根据模板进行预编译。

3.<@selfDefineLable var="" param1="" param2="">
  </@selfDefineLable>
  这是我喜欢Freemarker的原因之一,强大的自定义标签。

  那么怎么实现自定义标签呢?Freemarker提供了一个接口 TemplateDirectiveModel,描述如下:
    Objects that implement this interface can be used as user-defined directives 
  (much like macros). They can do arbitrary actions, write arbitrary
  text to the template output, and trigger rendering of their nested content
  any number of times.
   意思如下:实现此接口的对象可以作为用户定义指令(很像宏)。他们做任意的行为,写入任意
文本模板的输出,并触发其嵌套的内容以任意的次数显示出来。
   当然这个接口并不是一开始就有的,在2.3.11版本的Freemarker之后才加入了该接口。可能看完上面一段话,你可能会觉得生涩难懂。没关系只要看懂下面的例子就行了。


  import java.io.IOException;
  import java.io.Writer;

  import java.util.Map;

  import com.common.freemarker.DirectiveUtils;

  import static freemarker.template.ObjectWrapper.DEFAULT_WRAPPER;

  import freemarker.core.Environment;

  import freemarker.template.TemplateDirectiveBody;

  import freemarker.template.TemplateDirectiveModel;

  import freemarker.template.TemplateException;

  import freemarker.template.TemplateModel;



public class TestDirective implements TemplateDirectiveModel {

    @Override

    public void execute(Environment env,
                       Map params,
                       TemplateModel[] loopVars,
                       TemplateDirectiveBody body)
                       throws TemplateException, IOException {

        Writer out = env.getOut();// 固定写法
       // 获取标签中,参数名为'param'对应的值  
       Long tpyeID= DirectiveUtils.getLong("param",params);
       // 获取标签中,参数名为'var'对应的值
       String varName = DirectiveUtils.getString("var", params);
       // 根据获得的值,根据业务来处理输出数据
       // 比如在新闻版块,从模板上把某一类的新闻的TypeID传给了自定标签
       // 根据这个TpyID我们可以去获取前Top5的新闻,将这个Top5新闻封装在
       // 自定义标签中。在预编译模板的时候,自定义标签就会被解析为5条新闻
       // 并按照你预定的格式显示在页面上
       List list = xxxxService.getTop5News(typeID);
       // 比如你list里封装的是新闻对象(new)  
        //循环这个列表,依此把对象放入自定义标签中

      
        for (New new: list) {
           // varName,相当于Map中的Key.通过varName可以在模板中取出new对象的值

           env.setVariable(varName , DEFAULT_WRAPPER.wrap(new));
                                   body.render(env.getOut());

       }

    }

}

// 模板中标签的写法
<@t_test var="news" param="TypeID">
   ${news.属性}<---- 取出值
</@t_test >


在完成类的编写后在Spring配置文件中声明这个类


<bean id="TestDirective" class="XXX.TestDirective"/>


记得之前那边文章中spring配置文件中的 freemarkerVariables 属性吗?
通过Spring配置文件将我们的自定义标签注入进去

  <property name="freemarkerVariables">

       <map>           
         <entry key="TestDirective" value-ref="t_test"/> [t_test]自定义名称,对应模板中的标签           </map>

  </property>




分享到:
评论

相关推荐

    通过freemarker模板 生成PDF

    1. **创建Freemarker模板**:编写一个`.ftl`文件,包含HTML和Freemarker指令。 2. **准备数据模型**:在Java代码中,创建一个对象或Map,包含将要填充到模板中的数据。 3. **处理模板**:使用Freemarker API的`...

    freeMarker模板文件附件.zip

    通过分析提供的示例,学习者可以学习到如何编写可维护和可扩展的FreeMarker模板。 7. **模板语法** FreeMarker的语法包括变量引用(`${}`)、三元操作符(`&lt;#if&gt;`、`&lt;#else&gt;`)、循环结构(`&lt;#foreach&gt;`)、条件...

    java使用freemarker模板技术导出word

    3. **编写 FreeMarker 模板**:设计一个 .ftl(FreeMarker Template Language)文件,其中包含 Word 文档的结构和占位符。占位符将以 `${}` 包围,用于在运行时被数据模型中的值替换。 4. **加载模板**:使用 ...

    基于Freemarker模板的代码生成器工具

    本篇将重点介绍一款名为“基于Freemarker模板的代码生成器工具”,这是一款纯Java实现的工具,利用了Freemarker模板引擎的强大功能。 **一、Freemarker模板引擎** Freemarker是一个开源的模板语言,用于生成动态...

    可视化div布局 生成freemarker模板

    本话题主要探讨的是如何利用可视化div布局来生成FreeMarker模板,并结合Spring MVC 3框架进行应用。下面将详细阐述这些概念及其相关知识点。 1. **FreeMarker模板引擎**:FreeMarker是一个开源的Java模板引擎,它...

    Java利用Freemarker模板自动生成dto、dao、rowmapper、bo、service代码

    本主题涉及的核心技术是使用Freemarker模板引擎来生成DTO(Data Transfer Object)、DAO(Data Access Object)、RowMapper、BO(Business Object)和服务层代码。这些组件在Spring框架中扮演着重要角色。 1. **...

    FreeMarker模板设计指南

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序 虽然FreeMarker具有一些编程的能力...

    基于itext7+freemarker模板导出pdf

    步骤二:创建FreeMarker模板 创建一个HTML模板文件,例如`template.ftl`,并定义好所需的结构和样式。模板中可以使用FreeMarker语法 `${}` 来引用数据模型中的变量。 步骤三:准备数据模型 定义一个Java对象或Map来...

    freemarker模板引擎

    通过Mapper接口和XML配置文件,开发者可以方便地编写和执行SQL,获取数据后传递给Freemarker模板进行渲染。 6. **Web开发框架集成** 在Java Web开发中,Spring MVC或Struts2等框架通常会与Freemarker集成,提供...

    Java项目中利用Freemarker模板引擎导出--生成Word文档

    在这里将通过Freemarker这个模板引擎来实现导出 Word,项目不限于Swing,SSH,SSM,Spring Boot 之类的 ————————————— Spring Boot,Freemarker 编辑好格式的Word文档 1份 将Word文档里需要填充的地方...

    FreeMarker模板包括dto、dao、rowmapper、bo、service

    模板编写为FreeMarker Template Language (FTL)。它是简单的,专用的语言, 不是 像PHP那样成熟的编程语言。 那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的...

    Struts2与FreeMarker模板

    ### Struts2与FreeMarker模板 #### Struts2简介 Struts2是Apache软件基金会的一个开源项目,它是一个用于开发Java EE应用程序的MVC(Model-View-Controller)框架。Struts2继承了Struts1的优点,并在此基础上进行...

    freemarker模板

    Freemarker模板是一种强大的、基于Java的开源模板引擎,用于生成动态内容。它主要用于Web应用程序,尤其是与Spring框架集成时,但也可用于任何需要将数据模型转化为文本输出的场景,如电子邮件生成、报告制作等。在...

    EOS 中使用freemarker模板生成PDF文件导出

    在这个场景下,使用Freemarker模板技术可以帮助我们实现这一目标。Freemarker是一个强大的、轻量级的模板引擎,它可以将模板和数据模型结合起来,生成输出文本,如HTML、XML或者如本例中的PDF。 首先,我们需要了解...

    freemarker编辑插件

    "freemarker编辑插件"能够集成到Eclipse中,使得开发者在编写Freemarker模板时可以享受到诸如语法高亮、自动完成、错误检查等功能。这个插件的版本为0.9.14,可能包含了对Freemarker语法的最新支持以及一些优化的...

    freemarker根据word模板生成word的完整示例

    关于标签中的"freemarker",它强调了Freemarker作为模板引擎的角色;"模板"指的是用于生成Word文档的XML文件;"生成word"则表明了我们是在使用Freemarker进行动态内容生成,具体是Word文档。 总结一下,这个示例...

    myeclipse freemarker编辑器模板插件及配置说明

    总的来说,`myeclipse freemarker编辑器模板插件` 提升了MyEclipse对Freemarker模板语言的支持,使得开发者能在IDE内更便捷地进行FTL文件的编写和调试,提高开发效率。通过正确安装和配置,你可以充分利用这个工具来...

    freemarker-2.3.30模板word导出.zip

    1. **Freemarker模板语言**: Freemarker是一种基于模板的语言,它允许开发者用简单的标记语法来描述如何生成输出。这些模板与实际数据源(如Java对象)结合后,可以生成动态内容。模板设计时与业务逻辑分离,使得...

    Freemarker导出word示例,包括jfreechart图表

    Freemarker模板由纯文本组成,其中包含特定的控制结构,如`&lt;#if&gt;`、`&lt;#foreach&gt;`等,以及变量占位符`${variable}`。当模板被解析时,这些占位符会被提供的数据模型中的对应值替换。开发者可以创建一个Map或JavaBean...

Global site tag (gtag.js) - Google Analytics