1. FreeMarker模板引擎的使用: 模板 + 数据模型 = 输出
1) FreeMarker模板:一个普通文本文件,其中使用了一些FreeMarker的特别标记。
2) 数据模型:存放了数据的数据结构,通常是一个Hash存储结构(如:HashMap)
3) FreeMarker框架负责将一个数据模型中的数据合并到模板中,从而生成输出。
2. 配置使用环境: 下载(http://www.freemarker.org/)并把freemarker-2.x.x.jar添加到应用程序的classpath下。
3. Java应用:
1) 创建数据模型: Map<String, Object> root = new HashMap<String,Object>();
2) 创建模板文件: templates/first.ftl
3) 合并:
//创建一个Configuration实例来初始freeMarker的配置 //在classpath下添加一个名为freemarker.properties
Configuration cfg = new Configuration();
//设置模板文件的存放目录
cfg.setDirectoryForTemplateLoading(new File("templates"));
//加载指定的模板
Template t = cfg.getTemplate("first.ftl");
//处理合并
t.process(root, new OutputStreamWriter(System.out));
4. web应用中直接使用FreeMarker: 在Servlet的请求处理方法中:
//创建一个Configuration实例来初始freeMarker的配置
Configuration cfg = new Configuration();
//设置模板文件的存放目录
cfg.setServletContextForTemplateLoading(getServletContext(),"/templates");
//加载指定的模板
Template t = cfg.getTemplate("first.ftl", "UTF-8");
//处理合并
t.process(root, response.getWriter());
★5. FTL(FreeMarker模板语言)语法:
1) 模板文件由4部分组成:
a) 文本:直接输出的部分
b) 注释:<#-- 注释内容 --> 不会输出
c) 插值(interpolation):${表达式} 或 #{表达式} ,将使用数据模型中的数据替换后再输出
d) FTL指令:
内置(预定义)指令:<#指令名 属性名="值">主体</#指令名> 如:<#if user??>${user.loginname}</#if>
自定义指令: <@指令名 属性名="值">主体</@指令名>
2) 插值规则
a) 表达式放置在插值语法${}之中,用于输出表达式的值。
b) 表达式的值的类型可以是:字符串、 数字、布尔、日期时间、序列、Hash结构
c) 表达式支持Java中的所有运算符:
算术运算符:+、-、*、/、%
比较运算符:==(eq)、!=(ne)、>(gt)、>=(gte)、<(lt)、<=(lte)
逻辑运算符:&&(and)、||(or)、!(not)
三目运算符:? :
d) 内置函数:
Ⅰ) 使用方式:表达式?函数名[(实参)]
Ⅱ) 字符串的常用内置函数: substring(from[, to])、html、length、trim、url
示例:<#setting url_escaping_charset="UTF-8"> 、exp?url[("UTF-8")]
Ⅲ) 数字的常用内置函数:c、string[(数字模式串)]、
Ⅳ) 布尔的内置函数:string[("男", "女")]
Ⅴ) 内置的常用日期时间函数:string[("格式模式串")]、datetime、date、time
e) 序列:
在FTL中定义的序列:由方括号包括,各元素用英文逗号分隔如:<#assign seq=["winter", "spring", "summer", "autumn"]>
也可以用数字范围(递增、反递增)定义数字序列: <#assign nums=101..105> 或 <#assign nums=105..101>
在数据模型中:可以是List对象、Set对象
序列的常用内置函数:size、sort[("指定字段作排序依据")]
f) Hash结构:
在FTL文件中直接定义时:由大括号包括,由逗号分隔键/值列表,键和值之间用冒号分隔。键必须是字符串。
如: <#assign scores={"语文":78, "数学":89, "英语":87}> ${scores.语文}
在数据模型中:可以是Map对象
Hash结构的内置函数:size、keys、values
3) FreeMarker中的空值判断
a) 判断是否为空值:用??(?if_exists,?exists) 如果不为空返回true,否则返回false。
b) 通过Configuration设置:Configuration cfg = new Configuration(); cfg.setClassicCompatible(true);
c) 属性配置方式:在freemarker.properties文件中classic_compatible=true
d) 通过ftl设置:在ftl文件头前加入<#setting classic_compatible=true>
e) 在FTL中遍历序列、Hash结构时:<#if userList??><#list userList as user>....</#list></#if>
4) 常用内置指令:
a) if/else
<#if condition>
...
<#elseif condition2>
...
<#elseif condition3>
...
...
<#else>
...
</#if>
b) switch/case
<#switch value>
<#case refValue1>
...
<#break>
<#case refValue2>
...
<#break>
...
<#case refValueN>
...
<#break>
<#default>
...
</#switch>
c) list
<#list sequence as item> <#-- item_index 当前迭代项的索引 -->
...
</#list>
d) include 包含指定文件。类似于JSP中的include标准动作
<#include "文件路径" [encoding="charset"] [parse=true|false]>
e) import 导入指定模板中的所有变量。
<#import "文件路径" as hash>
f) noparse 不处理该指令中包含的内容
<#noparse>
…
</#noparse>
g) assign: 为当前模板页面创建或替换一个顶层变量
<#assign name=value>
<#assign name1=value1 name2=value2 ... nameN=valueN>
h) global:创建或替换一个命名空间全局范围作用域的顶层变量
i) local:创建或替换一个局部作用域的顶层变量
j)setting 设置FreeMarker运行时的属性.语法:<#setting name=value>
name常用的有:
locale:该模板所使用的语言环境选项。en,zh,zh_CN,zh_TW
number_format:数字格式化输出的格式
boolean_format:布尔值格式化输出的格式
date_format,time_format,datetime_format:日期时间格式化输出的格式
time_zone:格式化输出日期时间所使用的时区。
url_escaping_charset:URL编码的字符集。
k) 自定义指令:<#macro 指令名 属性名...>...</#macro>
用自定义指令写的一个分页标签参见本人博客:http://blog.csdn.net/qjyong/archive/2009/10/18/4693142.aspx
6. Web应用中整合FreeMarker:FreeMarker提供了FreemarkerServlet类来整合模板到Web应用中:
1) 这个Servlet在数据模型中放置了三个Hash结构:
Request, Session, Application,分别用来访问请求,会话,应用上下文中的属性。
访问作用域中的属性时,没有指定Hash结构名,它会依次按Request,Session,Application顺序搜索。
2) 它还提供了一个名为RequestParameters的Hash结构,用来访问HTTP请求中的参数数据。
7. Struts2中整合FreeMarker: Struts2默认就是使用FreeMarker来产生所有UI标签的HTML标记。
1) 提供了FreeMarkerResult来支持FTL页面。
<result type="freemarker">/templates/info.ftl</result>
2) FreeMarker针对Struts2提供了以下内置Hash结构:
a) stack: 代表ValueStack本身
b) action: 代表刚刚执行过的Action实例
c) response: 代表HpptServletResponse实例
d) res: 代表HpptServletResponse实例
e) request: 代表HpptServletRequest实例
f) req: 代表HpptServletRequest实例
g) session: 代表HpptSession实例
h) application: 代表ServletContext实例
i) base: 代表用户请求的上下文路径
8. 使用FreeMarker完成页面的静态化:
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qjyong/archive/2009/12/07/4959716.aspx
分享到:
相关推荐
### Freemarker 使用总结与详解 #### 一、Freemarker 概述 Freemarker 是一种用于生成动态页面的模板引擎。它不依赖任何 Web 容器,可以在任何 Java 应用程序中使用。Freemarker 的核心优势在于其简单易学且功能...
它被广泛应用于Web开发中,特别是与Java后端框架如Spring、Struts等配合使用,用于生成视图层的内容。在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. ...
Freemarker语法总结 Freemarker是一种基于模板的模板引擎,主要用来生成静态 HTML 页面。FreeMarker 模板文件由四个部分组成:文本、注释、插值和 FTL 指令。 一、文本 文本是 Freemarker 模板文件的直接输出部分...
### FreeMarker使用详解 #### 一、快速入门:模板+数据模型=输出 FreeMarker是一种强大的模板引擎,专为Web开发设计,它基于一个核心理念:设计者和程序员应专注各自的专业领域,即设计者负责视觉表现,如HTML、...
本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本概念。FreeMarker是一个基于模板的语言,它与Java代码分离,允许开发者用简单的模板语法来表示数据。...
总结来说,Freemarker.jar是Java Web开发中一个强大的模板引擎,它与JDK 1.8兼容,能有效地将数据和视图分离开,使前端展示与后端业务解耦。在实际项目中,了解和掌握Freemarker的使用技巧,可以极大地提高开发效率...
总结来说,这个压缩包内容可能包括如何在Grails项目中配置和使用FreeMarker,以及如何处理领域类之间的关系映射,特别是“one2many”关系。通过学习这些知识,开发者可以更有效地构建Grails应用,并利用FreeMarker...
再来看《Freemarker使用总结》和《freemarker笔记》。这些文档通常是个人或团队在实践中积累的经验总结,它们可能包含了一些最佳实践、技巧或者常见问题的解决方案。通过阅读这些笔记,你可以快速掌握Freemarker在...
Freemarker是一个强大的模板引擎,它允许程序员...总结,`freemarker.jar`在Java 8环境下的使用,意味着开发者可以借助其强大的模板语言和Java 8的特性,高效地构建动态内容生成系统,同时保持代码的清晰性和可维护性。
### Freemarker与Sitemesh结合的关键知识点 #### 一、简介 - **Freemarker**:作为一...通过上述步骤,可以有效地将Freemarker和Sitemesh结合使用,实现动态内容与静态布局的分离,提高Web应用的开发效率和可维护性。
总结,Freemarker和Velocity都是强大的模板引擎,它们能够帮助开发者高效地实现动态内容的生成。理解并掌握这两种工具,对于提升Java Web开发能力至关重要。通过阅读提供的"freemarker语法.doc"文档,你可以深入了解...
以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...
总结一下,使用FreeMarker扩展Struts2标签是提高Web应用开发效率和代码质量的有效手段。通过创建自定义的标签和模型,开发者可以更好地抽象出复杂的业务逻辑,使得视图层更易于管理和维护。在实际项目中,这不仅可以...
下面我们将深入探讨如何配置Spring以使用Freemarker作为视图解析器,以及如何在前端页面上全面使用Freemarker进行渲染。 首先,我们需要在Spring的配置文件中添加对Freemarker的支持。这通常涉及到以下几个步骤: ...
在IT领域的模板引擎技术中,FreeMarker是一种广泛使用的开源模板引擎,它被设计用于生成文本输出,如HTML、XML或纯文本。FreeMarker提供了一种灵活且强大的方式来处理动态内容,尤其适用于Web开发中的视图层。在...
### FreeMarker 概述 FreeMarker 是一款模板引擎,它主要功能是基于模板和变动的数据来生成...尽管存在一些挑战,如学习新模板语言和处理空值等,但对于大多数 Java 开发者来说,掌握 FreeMarker 的使用是非常有益的。
总结,Freemarker是一个强大且灵活的工具,通过合理的数据模型设计和模板编写,可以方便地生成各种Java代码,极大地提高了开发效率。正确理解和运用Freemarker,将使你在代码生成任务上事半功倍。
总结来说,"freemarker+itext生成PDF"的主题涵盖了使用FreeMarker模板引擎和Itext库在Java环境中动态生成PDF的技术。这是一项实用技能,对于需要自动化生成PDF文档的项目非常有价值。通过学习和实践这个主题,开发者...