`
liubaoshan
  • 浏览: 41817 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

FreeMarker实现递归的方法

阅读更多
一、在页面编写要显示的FreeMarker标签
  例如:我要显示类似于树型的结构如:
1.root
  2.child
    3.child
4.root
  5.child
    6.child

结合hibrenate的方法,就是假如有一个分类表,一个分类下又有子分类,注意分类是可以无限的扩展的,在数据库表的设计中我们把分类表的关联设计为自关联即自己关联自己


然后我们要在数据库中找出所有的根分类(root),在显示页面编写以下代码:
<#assign n=0/>这里定义一个变量是用来记数显示编号的
<#list rootlist?if_exists as root>
<#assign n=n+1/>
         这里表示要显示的内容${n}${root.id}
<#if root.child?exists>//判断是否有子分类
   <#assign root=root.child/>//如果有子分类就把子分类的set集合赋值给root,root是一个在if语句块中定义的一个变量
   <#assign n=n/>
            <#include "filename.ftl">//filename.ftl是一个自己定义的一个模板文件,注意该文件是存放在跟当前页面文件同在一个目录下的.<#include "*/footer.ftl">表示当前目录下以及所有父目录下的文件
</#if>
</#list>

因为利用了hibranate关联性所有每一个分类都有对应的一个关联它的子分类的set集合

二、最后定义模板文件(ftl)filename.ftl如下:

<#list rootlist?if_exists as root>
<#assign n=n+1/>
         这里表示要显示的内容${n}${root.id}
<#if root.child?exists>
   <#assign root=root.child/>
   <#assign n=n/>
            <#include "filename.ftl">
</#if>
</#list>

其实这个文件的内容是跟以上定义的FreeMarker标签是一样的
ok 这样搞定了!

分享到:
评论
3 楼 hsq56789 2009-11-11  
有完整的例子吗?

急需,刚学。谢谢了。
2 楼 ember_319 2009-02-10  
bromon 写道
使用宏来做递归更好:

<#macro buildNode child parent>
    <#if child?? && child?size gt 0>
        <#list child as t>
            //to build tree node
            <@buildNode child=t.child parent=t/>
        </#list>
    </#if>
</#macro>

调用这个宏: (假设已构造一个自嵌套结构的对象data.treeRoot)

<@buildNode child=data.treeRoot.child parent=data.treeRoot/>

宏的确要好得多,刚好也要用到这个递归的使用
1 楼 bromon 2009-01-06  
使用宏来做递归更好:

<#macro buildNode child parent>
    <#if child?? && child?size gt 0>
        <#list child as t>
            //to build tree node
            <@buildNode child=t.child parent=t/>
        </#list>
    </#if>
</#macro>

调用这个宏: (假设已构造一个自嵌套结构的对象data.treeRoot)

<@buildNode child=data.treeRoot.child parent=data.treeRoot/>

相关推荐

    s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单.rar

    本项目“s2sh+freemarker+jquery+jquery-treeview 无限级树形菜单”就是这样一个解决方案,它整合了多种技术来实现这一功能。 首先,我们来看“s2sh”。这是Struts2、Spring和Hibernate三者的简称,它们分别是MVC...

    Freemarker如何生成树形导航菜单(递归)

    在Freemarker中,我们可以通过宏(macro)来实现递归,将这个结构转换为HTML代码。 宏在Freemarker中类似于函数,定义了参数列表和行为。在给出的示例中,定义了一个名为`menuTree`的宏,它接受一个名为`menus`的...

    FreeMarker.pdf

    而在XML处理上,FreeMarker提供递归遍历XML树的指令,简化了对XML数据的操作。 为了开始使用FreeMarker,首先需要搭建环境。这里以Maven Web项目为例,新建项目后,在`pom.xml`文件中添加FreeMarker的坐标依赖和...

    Freemarker简介及标签详解大全

    8. 强大的 XML 处理能力:&lt;#recurse&gt; 和指令(2.3 版本)用于递归遍历 XML 树。 -FreeMarker 的标签: 1. assign:assign 指令在前面已经使用了多次,它用于为该模板页面创建或替换一个顶层变量。 2. break:指令...

    freemarker中文API手册

    6. 强大的XML处理能力:支持递归遍历XML树,能够在模板中清楚和直觉的访问XML对象模型。 FreeMarker的设计指南是基于设计者和程序员是具有不同专业技能的不同个体的观念,提供了快速入门的指导,帮助开发者快速掌握...

    freemarker-2.3.8源码

    在源码包`freemarker-2.3.8`中,我们可以深入理解Freemarker的工作原理和内部实现。源码包包含了大量的Java文件,而非编译后的class文件或打包成的jar包,这意味着我们可以直接阅读、学习和修改源代码。以下是该源码...

    freemarker概述

    - **递归遍历**: 使用`&lt;#recurse&gt;`和`&lt;#visit&gt;`指令递归遍历XML树。 - **直观的XML访问**: 模板中可以直接访问XML对象模型,实现清晰直观的数据获取。 #### 五、FreeMarker设计指南示例 以下是一个简单的...

    FreeMarker概述2008

    2. **更强大的模板控制**:FreeMarker的宏功能更为强大,允许局部变量、递归宏调用、缺省参数和嵌套体内容。同时,宏可以作为变量或参数传递,增加了模板的灵活性。 3. **命名空间**:命名空间支持多个变量命名空间...

    FreeMarker中文版文档1

    此外,FreeMarker支持嵌套的对象和递归的数据结构。 1.4 模板一览 模板文件通常使用`.ftl`扩展名,其中包含HTML代码和其他FreeMarker指令。FreeMarker提供了多种控制结构,如条件语句(`&lt;#if&gt;`, `&lt;#else&gt;`)、循环(`...

    freemarker 完美实现

    FMPP(FreeMarker PreProcessor)是Freemarker的一个辅助工具,可以帮助你实现更多功能,如预处理、包含其他模板等。在使用Freemarker时,需要下载并配置FMPP来增强模板处理能力。 7. **优势与适用场景**: ...

    freemarker 中午手册

    - **递归处理**:通过 `&lt;#recurse&gt;` 和 `&lt;#visit&gt;` 指令可以方便地遍历 XML 树结构。 - **直观访问**:提供了直观且易于使用的 XML 对象模型访问方式,便于处理复杂的 XML 数据。 #### 八、快速入门案例分析 以下...

    FreeMarker中文API

    - 支持抽象的数据表示方法(如JavaBean、XML文档等),使得模板设计者可以专注于表现逻辑,而无需了解底层实现细节。 4. **为Web应用优化**: - 内置了处理Web相关任务的功能,例如HTML转义等。 - 适用于Model2...

    freemarker-2.3.19教程

    - **递归遍历**: 2.3 版本新增 `&lt;#recurse&gt;` 和 `&lt;#visit&gt;` 指令,用于递归遍历 XML 树。 - **直观的 XML 访问**: 在模板中提供清晰直观的方式来访问 XML 对象模型。 #### 快速入门 - **模板 + 数据模型 = 输出**: ...

    freemarker中文手册.doc

    6. **XML处理**:FreeMarker提供递归遍历XML树的`&lt;#recurse&gt;`和`&lt;#visit&gt;`指令,以及直观访问XML对象模型的方式,增强了XML文档的处理能力。 快速入门的例子展示了FreeMarker的工作原理。例如,模板中包含`${user}`...

    freeMarker资料

    - **递归遍历**:`&lt;#recurse&gt;` 和 `&lt;#visit&gt;` 指令(自2.3版本起)支持对XML树进行递归遍历。 - **直观的XML对象模型访问**:在模板中可以直接并且直观地访问XML对象模型。 #### 三、快速入门示例 下面是一个简单...

    freemarker中文文档

    6. **强大的XML处理**:FreeMarker提供递归遍历XML树的指令,如`&lt;#recurse&gt;`和`&lt;#visit&gt;`,以及直观访问XML对象模型的方法,方便在模板中处理XML数据。 快速入门的例子展示了FreeMarker的工作原理:设计者创建包含...

    Freemarker 设计指南

    可以使用抽象(接口)方式表示对象,告诉模板开发者使用方法,使其不受技术细节的打扰。 4. 为 Web 准备:在模板语言中内建处理典型 Web 相关任务,如 HTML 转义,能够集成到 Model2 Web 应用框架中作为 JSP 的替代...

    freemarker中文手册文档.pdf

    - FreeMarker的数据模型并非直接映射到Java对象上,而是通过插件式对象封装机制来处理,这使得模板开发者可以更加关注业务逻辑而无需关心底层技术实现细节。 - 支持多种抽象接口表示对象(例如JavaBean、XML文档、...

    FreeMarker

    - **递归遍历**:通过和指令实现XML树的递归遍历,简化XML数据的处理流程。 ### 实例演示 为了更好地理解FreeMarker的实际应用,这里给出一个简单的示例: 1. **项目搭建**:创建一个名为`testFreeMarker`的Java...

Global site tag (gtag.js) - Google Analytics