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

FreeMarker一篇通2

阅读更多

[代码8]

运行得到输出文件类似这样:

 

    class Type1 
    
{
        
public Float Field11;
        
public String Field12;
        
public Integer Field13;
        
public Type2 Field14;
        
public Float Field15;
    }

 
    
class Type3 
    
{
        
public Type1 Field31;
    }


    
class Type2 
    
{
        
public String Field21;
        
public Integer Field22;
    }

[代码9]

大家比较一下,看看我们修改的地方出现了哪些效果?然后记得大家要做另外2件事情,
1。把第一行修改成为<#ftl ns_prefixes={"D": "urn:DruleForm-Lite.xsd"}> ,然后把所有的 <#macro "ns:type"> 修改成<#macro type>,把所有的.node["ns:type"]修改成 .node.type,看看能不能运行?是不是觉得简单方便些了?记住,第一行的那个D表示是default namespace的意思哦。
2。在第二行插入<#compress>,在最后一行添加。再运行一下看看结果有什么不同?

一个例子下来,大家基本对freemaker有了一些感觉了,为了纠正大家认为freemaker就是一个xml处理工具的误解,我们再来做一个简单的实验。这次我们要做的是一个正常的编程题目,做一个100以内的Fibonacci数列的程序。程序如下:

迭代次数:
<#list 1 .. 10 as n>
 ${n} = ${fibo(n)}
#list>

<#compress>
<#function fibo n>
 
<#if n lte 1>
  
<#return 1>
 
<#elseif = 2>
  
<#return 1>
 
<#else>
  
<#return fibo(n-1) + fibo(n-2)>
 
#if>
#function>
#compress>

[代码10]

这个例子里边有一些问题需要注意,大家看我的 #if n lte 1 这一行,为什么我这么写?因为常规的大于小于号和xml的节点有冲突,为了避免问题,所以用 gt(>) gte(>=) lt(<) lte(<=) 来代表。

另外,复杂的字符串处理如何来做?就留作家庭作业吧,大家记得取substr的方法是 str[first .. last] 就可以了。如下的例子可能会给你一点提示:

<#assign str = "hello!$world!">
<#assign mid = (str?length + 1)/2-1 >
<#list mid .. 0 as cnt>
 ${str[(mid - cnt) .. (mid + cnt)]?left_pad(mid*2)}
#list>

[代码11]

最后,说一下非常有用的macro的nested指令,没有它,也许freemaker会失去大部分的魅力。我个人认为这也是freemaker全面超越velocity的地方。大家先看一下代码:

<#assign msg = "hello">
<@macro0 ; index >
 ${msg} ${index}
@macro0>

<#macro macro0>
 
<#list 0 .. 10 as number>
  
<#nested number>
 
#list>
#macro>

[代码12]

这段代码的作用就是一个闭包(closure)。我们用java的匿名类实现相同的功能就是这样:

interface ICallback
{
 
public void call(int index);
}


void Main()
{
 String msg 
= "hello";
 macro0(
  
new ICallback()
  
{
   
public void call(int index)
   
{
    System.out.println(msg 
+ index.toString());
   }

  }

 );
}


void macro0(ICallback callback)
{
 
for(int i = 0; i < 10++i)
 
{
  callback.call(i);
 }

}

分享到:
评论

相关推荐

    freemarker实现一行两列算法

    ### Freemarker实现一行两列布局算法 在Web开发中,数据展示经常需要按照特定的格式进行排列,例如常见的列表项按行对齐显示等。Freemarker作为一种强大的模板引擎,可以方便地处理这类布局需求。本文将详细介绍...

    freemarker 自定义freeMarker标签

    本篇将深入探讨如何自定义FreeMarker标签,以扩展其功能并适应特定项目需求。 首先,理解FreeMarker的默认标签语法至关重要。FreeMarker使用${...}表达式来插入变量,#{...}用于输出注释,以及、等控制结构进行条件...

    struts2+freemarker

    在实际开发中,"freemarker2"这个文件可能是Freemarker的一个示例模板或者配置文件,它可能包含了如何使用Freemarker语法来构建动态网页的具体示例。通过对这个文件的深入学习和实践,开发者可以更熟练地掌握Struts2...

    一篇很全面的freemarker教程

    一篇很全面的freemarker教程reeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4,FTL指令:...

    struts2和freemarker整合

    Struts2是一个基于MVC(Model-View-Controller)架构模式的开源框架,用于构建动态、数据驱动的Web应用程序,而FreeMarker则是一个模板引擎,它允许开发者将业务逻辑与视图层分离,使得前端展示更加灵活和高效。...

    freemarker Demo 适用于freemarker初学

    Freemarker是一个强大的模板引擎,常用于JavaEE应用中的视图层处理,尤其与Struts2等MVC框架配合使用,能实现灵活的动态页面渲染。这个"freemarker Demo"是一个适合初学者的示例项目,旨在帮助新接触Freemarker的...

    Struts2 与Freemarker 的配置方法

    Struts2 是一个强大的MVC框架,而Freemarker则是一个模板引擎,用于生成动态内容。以下是关于Struts2与Freemarker配置的详细步骤和相关知识点: 1. **Freemarker简介**: - Freemarker 是一个基于模板的语言,主要...

    struts2+hibernate+freemarker项目实例

    这个"struts2+hibernate+freemarker"项目实例是将这三个框架集成到一起,构建了一个完整的Web应用程序。 **Struts2** 是一个强大的MVC框架,它基于Action和Result的设计模式,负责处理用户的请求,并将其转发到相应...

    Struts2+FreeMarker部署

    Struts2是一个基于MVC(Model-View-Controller)设计模式的开源框架,用于构建企业级Web应用程序,而FreeMarker则是一个模板引擎,用于生成动态HTML或其他类型的文档。下面我们将深入探讨这两个技术的结合及其在实际...

    freemarker

    描述:孔浩的Freemarker视频笔记,值得一看! 根据给定的文件信息,我们可以深入探讨Freemarker的相关知识点,包括其基本概念、工作流程以及具体的代码实现。 ### Freemarker基本概念 Freemarker是一个用Java语言...

    Struts2与FreeMarker模板

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

    在struts2中使用freemarker模版

    Struts2是一个强大的Java web应用程序框架,它提供了一种组织应用程序的方式,并且支持多种视图技术,其中之一就是FreeMarker模板。FreeMarker是一个基于模板的、声明式的语言,用于生成动态内容,尤其适合Web应用中...

    eclipse的freemarker插件

    2. **语法高亮**:提供Freemarker关键词和语法的色彩突出显示,提高代码可读性,便于快速识别模板中的指令和变量。 3. **代码提示和完成**:在编写模板时,插件能提供智能代码补全功能,根据上下文提示可能的指令和...

    freemarker-2.3.23jar

    2. **数据模型**:Freemarker的数据模型是基于Java对象的。它可以处理各种类型的数据,如字符串、数字、日期、列表、地图等。开发者可以通过`Model-View-Controller`(MVC)模式,将后端数据模型传递给模板。 3. **...

    struts2中使用freeMarker

    FreeMarker则是一个强大的、基于模板的Java模板引擎,常被用作Struts2中的视图层技术,帮助开发者将数据动态渲染成HTML或其他格式的文档。 在Struts2中使用FreeMarker,主要涉及以下几个核心概念和步骤: 1. **...

    freemarker.jar

    camel-freemarker-1.6.4.jar, camel-freemarker-2.8.1.jar, ...freemarker-1.4.1.jar, freemarker-2-3-18.jar, freemarker-2.1.5.jar, freemarker-2.2.5.jar, freemarker-2.2.8.jar, ...freemarker2_03.jar

    Struts2 和freemarker实例

    通过这个实例,我们将有机会实践上述知识点,一步步构建一个简单的Struts2应用,并结合FreeMarker实现动态视图。这将帮助我们深入理解这两个工具的协同工作方式,以及在实际项目中如何有效地利用它们提高开发效率和...

    freemarker-2.3.28.jar

    2. **数据模型绑定**: Freemarker的核心概念之一是数据模型,开发者将Java对象暴露给模板,模板通过这些对象来生成输出。比如,一个Web应用可以将请求上下文中的ModelAndView对象传递给Freemarker,然后在模板中引用...

    freemarker_struts2分页

    本篇文章将深入探讨如何在Struts2框架下结合FreeMarker实现分页功能,帮助开发者更高效地处理大数据量的展示问题。 首先,了解分页的基本原理。分页是用来解决一次性加载大量数据导致页面加载过慢或内存压力过大的...

Global site tag (gtag.js) - Google Analytics