SlideShare une entreprise Scribd logo
1  sur  11
FreeMarker 概述
   FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯
   Java 编写
   FreeMarker 被 设 计用 来 生 成 HTML Web 页 面 ,特 别 是 基于 MVC 模 式 的应 用 程
   序
   虽 然 FreeMarker 具 有 一 些 编 程 的 能 力 , 但 通 常 由 Java 程 序 准 备 要 显 示 的 数 据
   由 FreeMarker 生 成 页 面 , 通 过 模 板 显 示 准 备 的 数 据 ( 如 下 图 )




   FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件
   FreeMarker 与容 器无关, 因为它并 不知道 HTTP 或 Servlet;FreeMarker 同样可
    以应用于非 Web 应用程序环境
   FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板
    中使用 JSP 标记库
   FreeMarker 是免费的


1、通用目标
  能够生成各种文本:HTML、XML、RTF、Java 源代码等等
  易于嵌入到你的产品中:轻量级;不需要 Servlet 环境
  插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等
  你可以按你所需生成文本:保存到本地文件;作为 Email 发送;从 Web 应用程序发送
  它返回给 Web 浏览器

2、强大的模板语言
  所有常用的指令:include、if/elseif/else、循环结构
  在模板中创建和改变变量
  几乎在任何地方都可以使用复杂表达式来指定值
  命名的宏,可以具有位置参数和嵌套内容
  名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心
  名字冲突
  输出转换块:在嵌套模板片段生成输出时,转换 HTML 转义、压缩、语法高亮等等;
  你可以定义自己的转换

3、通用数据模型
  FreeMarker 不是直接反射到 Java 对象,Java 对象通过插件式对象封装,以变量方式在
  模板中显示
  你可以使用抽象(接口)方式表示对象(JavaBean、XML 文档、SQL 查询结果集等
  等),告诉模板开发者使用方法,使其不受技术细节的打扰

4、为 Web 准备
  在模板语言中内建处理典型 Web 相关任务(如 HTML 转义)的结构
  能够集成到 Model2 Web 应用框架中作为 JSP 的替代
</#list>

</table>




             FreeMarker 设计指南(3)
</#list>
    输出结果是:

    - Joe

    - Fred

    - Julia

    - Kate
   散列操作
     连接操作:和字符串一样,使用+,如果具有相同的 key,右边的值替代左边的值,例如:

    <#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}>

    - Joe is ${ages.Joe}

    - Fred is ${ages.Fred}

    - Julia is ${ages.Julia}
    输出结果是:

    - Joe is 30

    - Fred is 25

    - Julia is 18
   算术运算
     +、-、×、/、%,下面是一个例子:

    ${x * x - 100}

    ${x / 2}

    ${12 % 10}
    输出结果是(假设 x 为 5):

    -75

    2.5

    2
         操作符两边必须是数字,因此下面的代码是错误的:

    ${3 * "5"} <#-- WRONG! -->
         使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如:

    ${3 + "5"}
    输出结果是:

    35
         使用内建的 int(后面讲述)获得整数部分,例如:

    ${(x/2)?int}

    ${1.1?int}

    ${1.999?int}

    ${-1.1?int}

    ${-1.999?int}
    输出结果是(假设 x 为 5):

    2
FreeMarker 设计指南(4)
</#list>

      ${x}

    </#list>
输出结果:

      loop 1

        loop 2

          loop 3

        loop 2

      loop 1
   模板中的变量会隐藏(而不是覆盖)数据模型中同名变量,如果需要访问数据模
    型中的同名变量,使用特殊变量 global,下面的例子假设数据模型中的 user 的值是
    Big Joe:

    <#assign user = "Joe Hider">

    ${user}           <#-- prints: Joe Hider -->

  ${.globals.user} <#-- prints: Big Joe -->
(3)名字空间
  通常情况,只使用一个名字空间,称为主名字空间
  为了创建可重用的宏、          变换器或其它变量的集合(通常称库),必须使用多名字空
  间,其目的是防止同名冲突
  创建库
      下面是一个创建库的例子(假设保存在 lib/my_test.ftl 中):

    <#macro copyright date>

      <p>Copyright (C) ${date} Julia Smith. All rights reserved.

      <br>Email: ${mail}</p>

    </#macro>

    <#assign mail = "jsmith@acme.com">
        使用 import 指令导入库到模板中,Freemarker 会为导入的库创建新的名字空
        间,并可以通过 import 指令中指定的散列变量访问库中的变量:

    <#import "/lib/my_test.ftl" as my>

    <#assign mail="fred@acme.com">

    <@my.copyright date="1999-2002"/>

    ${my.mail}

    ${mail}
    输出结果:

      <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved.

      <br>Email: jsmith@acme.com</p>

    jsmith@acme.com

    fred@acme.com
    可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间
Freemarker - 几个比较实用的例子 - -



                                  用 Freemarker 做 模 本 语 言 有

一段时间了,列出几个和 JSP 或者 Velocity 相比起来比较方便的用

途 , 目 的 是 引 诱 更 多 的 人 跳 上 Freemarker 这 个 贼 船 ,



1.   String 内 置 的 JavaScript 转 换 :               js_string

用 途 : 用 于 JavaScript 转 义 , 转 换 ',", 换 行 等 特 殊 字 符

模                    板                  :



<script>

alert("${errorMessage?js_string}");

</script>




输                    出                  :



<script>

alert("Readonly's   pet   name   is   "Cross   Bone"");

</script>
2.   内      置      的    默   认     值     处       理       :    default

用       途    :          用    于      处       理       默       认    值

模                       本                       :



User:            ${userLogin.name?default("Anonymous")}



<td>${(employee.department.manager.name)?default(" ")}</td>




输                       出                       :



User:                            Anonymous

<td> </td>




注,可以对整个对象树加上(),再用内置处理器这种方便的做法,

偶 也 是 最 近 刚 学 会 的 , 以 前 一 直 用 很 傻 的 方 法 做 .....



3.      Sequence    内   置   的     计     数    器      :       xxx_index
用          途       :            显        示            序            号

模                       板                         :



<#list             employees                 as               e>

${e_index}.                            ${e.name}

</#list>




输                       出                         :



1.                              Readonly

2.                                  Robbin




4.     Sequence     内       置   的      分      段       器   :        chunk

用      途   :   某    些       比   较      BT     的       排   版        需   求

模                       板                         :



<#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',

'i',                                 'j']>

<#list            seq?chunk(4)               as           row>

<ul>
<li><#list    row    as     cell>${cell}        </#list></li>

</ul>

</#list>



<#list       seq?chunk(4,      '-')            as     row>

<tr>

<td><#list    row    as     cell>${cell}        </#list></td>

</tr>

</#list>




输                   出                      :



<ul>

<li>a</li>

<li>b</li>

<li>c</li>

<li>d</li>

</ul>

<ul>

<li>e</li>

<li>f</li>
<li>g</li>

<li>h</li>

</ul>

<ul>

<li>i</li>

<li>j</li>

</ul>



<tr>

<td>a</td>

<td>b</td>

<td>c</td>

<td>d</td>

</tr>

<tr>

<td>e</td>

<td>f</td>

<td>g</td>

<td>h</td>

</tr>

<tr>

<td>i</td>
<td>j</td>

<td>-</td>

<td>-</td>

</tr>

Contenu connexe

Tendances

jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习fangdeng
 
網頁設計 - 資料庫存取
網頁設計 - 資料庫存取網頁設計 - 資料庫存取
網頁設計 - 資料庫存取Vincent Chi
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Derek Lee
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Derek Lee
 
Php More
Php MorePhp More
Php Morehenbo
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)Leo Hui
 
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful功豪 魏
 
MySQL_EXPLAIN_liling
MySQL_EXPLAIN_lilingMySQL_EXPLAIN_liling
MySQL_EXPLAIN_lilingTracyLLing
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹Jace Ju
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)jane2006
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsHo Kim
 
Mongodb
MongodbMongodb
Mongodbbj
 
深入了解Memcache
深入了解Memcache深入了解Memcache
深入了解Memcachezubin Jiang
 

Tendances (20)

jQuery源码学习
jQuery源码学习jQuery源码学习
jQuery源码学习
 
Python串列資料應用
Python串列資料應用Python串列資料應用
Python串列資料應用
 
網頁設計 - 資料庫存取
網頁設計 - 資料庫存取網頁設計 - 資料庫存取
網頁設計 - 資料庫存取
 
Python元組,字典,集合
Python元組,字典,集合Python元組,字典,集合
Python元組,字典,集合
 
Php & Mysql
Php & MysqlPhp & Mysql
Php & Mysql
 
Json知识分享
Json知识分享Json知识分享
Json知识分享
 
Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18Python入門:5大概念初心者必備 2021/11/18
Python入門:5大概念初心者必備 2021/11/18
 
Python入門:5大概念初心者必備
Python入門:5大概念初心者必備Python入門:5大概念初心者必備
Python入門:5大概念初心者必備
 
Python程式設計 - 分支作業
Python程式設計 - 分支作業Python程式設計 - 分支作業
Python程式設計 - 分支作業
 
Php More
Php MorePhp More
Php More
 
Js的国(转载)
Js的国(转载)Js的国(转载)
Js的国(转载)
 
那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful那 Angular 那 AJAX 那 RESTful
那 Angular 那 AJAX 那 RESTful
 
MySQL_EXPLAIN_liling
MySQL_EXPLAIN_lilingMySQL_EXPLAIN_liling
MySQL_EXPLAIN_liling
 
常見設計模式介紹
常見設計模式介紹常見設計模式介紹
常見設計模式介紹
 
PHP
PHPPHP
PHP
 
Python程式設計 - 基本資料運算
Python程式設計 - 基本資料運算Python程式設計 - 基本資料運算
Python程式設計 - 基本資料運算
 
《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)《Java程序设计》期末考试试题 (六)
《Java程序设计》期末考试试题 (六)
 
PHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming SkillsPHP Coding Standard and 50+ Programming Skills
PHP Coding Standard and 50+ Programming Skills
 
Mongodb
MongodbMongodb
Mongodb
 
深入了解Memcache
深入了解Memcache深入了解Memcache
深入了解Memcache
 

En vedette

Conflictos
ConflictosConflictos
Conflictossagane75
 
What Happened From 1767 Until Now In The
What  Happened From 1767 Until Now In TheWhat  Happened From 1767 Until Now In The
What Happened From 1767 Until Now In Theh20ho
 
Hi 121 Power Point Aug Sep09
Hi 121 Power Point Aug Sep09Hi 121 Power Point Aug Sep09
Hi 121 Power Point Aug Sep09h20ho
 
IARC Münich 2008 Plastics Recycling
IARC Münich 2008 Plastics RecyclingIARC Münich 2008 Plastics Recycling
IARC Münich 2008 Plastics RecyclingMBA Polymers Inc
 
How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?Softworld
 
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web Caso Pr...
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web   Caso Pr...Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web   Caso Pr...
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web Caso Pr...search congress
 
Dall'ideazione Alla Vedita - Comieco
Dall'ideazione Alla Vedita - ComiecoDall'ideazione Alla Vedita - Comieco
Dall'ideazione Alla Vedita - ComiecoMarrài a Fura
 
数据字典
数据字典数据字典
数据字典yiditushe
 
STIA-LAN:Balance.Score.Card on Strategic.Management
STIA-LAN:Balance.Score.Card on Strategic.ManagementSTIA-LAN:Balance.Score.Card on Strategic.Management
STIA-LAN:Balance.Score.Card on Strategic.ManagementDjadja Sardjana
 
Progetto Naturaldurante
Progetto NaturalduranteProgetto Naturaldurante
Progetto NaturalduranteMarrài a Fura
 
Libro Coriandoline Le Case Amiche Dei Bambini E Delle Bambine
Libro Coriandoline Le Case Amiche Dei Bambini E Delle BambineLibro Coriandoline Le Case Amiche Dei Bambini E Delle Bambine
Libro Coriandoline Le Case Amiche Dei Bambini E Delle BambineMarrài a Fura
 
Trade diversion: a outcome of Regional economic integretion
Trade diversion: a outcome of Regional economic integretion Trade diversion: a outcome of Regional economic integretion
Trade diversion: a outcome of Regional economic integretion Machiraju Presentations Pvt. Ltd.
 
Clustering Theory
Clustering TheoryClustering Theory
Clustering TheorySSA KPI
 

En vedette (17)

10 22 Propagation
10 22 Propagation10 22 Propagation
10 22 Propagation
 
Conflictos
ConflictosConflictos
Conflictos
 
What Happened From 1767 Until Now In The
What  Happened From 1767 Until Now In TheWhat  Happened From 1767 Until Now In The
What Happened From 1767 Until Now In The
 
Hi 121 Power Point Aug Sep09
Hi 121 Power Point Aug Sep09Hi 121 Power Point Aug Sep09
Hi 121 Power Point Aug Sep09
 
IARC Münich 2008 Plastics Recycling
IARC Münich 2008 Plastics RecyclingIARC Münich 2008 Plastics Recycling
IARC Münich 2008 Plastics Recycling
 
How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?How should we prepare for integrated HR & payroll software?
How should we prepare for integrated HR & payroll software?
 
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web Caso Pr...
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web   Caso Pr...Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web   Caso Pr...
Search Congress Valencia Multiplica Enric Quintero OptimizacióN Web Caso Pr...
 
Dall'ideazione Alla Vedita - Comieco
Dall'ideazione Alla Vedita - ComiecoDall'ideazione Alla Vedita - Comieco
Dall'ideazione Alla Vedita - Comieco
 
数据字典
数据字典数据字典
数据字典
 
STIA-LAN:Balance.Score.Card on Strategic.Management
STIA-LAN:Balance.Score.Card on Strategic.ManagementSTIA-LAN:Balance.Score.Card on Strategic.Management
STIA-LAN:Balance.Score.Card on Strategic.Management
 
Progetto Naturaldurante
Progetto NaturalduranteProgetto Naturaldurante
Progetto Naturaldurante
 
Libro Coriandoline Le Case Amiche Dei Bambini E Delle Bambine
Libro Coriandoline Le Case Amiche Dei Bambini E Delle BambineLibro Coriandoline Le Case Amiche Dei Bambini E Delle Bambine
Libro Coriandoline Le Case Amiche Dei Bambini E Delle Bambine
 
Trade diversion: a outcome of Regional economic integretion
Trade diversion: a outcome of Regional economic integretion Trade diversion: a outcome of Regional economic integretion
Trade diversion: a outcome of Regional economic integretion
 
Clustering Theory
Clustering TheoryClustering Theory
Clustering Theory
 
Hot topics in Consumer Protection: Collection Agencies Webinar
Hot topics in Consumer Protection: Collection Agencies WebinarHot topics in Consumer Protection: Collection Agencies Webinar
Hot topics in Consumer Protection: Collection Agencies Webinar
 
American CareSource Holdings
American CareSource HoldingsAmerican CareSource Holdings
American CareSource Holdings
 
Booklet Pasqua 2016
Booklet Pasqua 2016Booklet Pasqua 2016
Booklet Pasqua 2016
 

Similaire à Free Marker中文文档

[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務台灣資料科學年會
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Chun-Min Chang
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in RChun-Ming Chang
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程dyzm_2000
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanupted-xu
 
浏览器工作原理浅析
浏览器工作原理浅析浏览器工作原理浅析
浏览器工作原理浅析癸鑫 张
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现hua qiu
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点thinkinlamp
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Justin Lin
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门Lucien Li
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學Sita Liu
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算建興 王
 
C++工程实践
C++工程实践C++工程实践
C++工程实践Shuo Chen
 
Python速成指南
Python速成指南Python速成指南
Python速成指南March Liu
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范Hongjian Wang
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 

Similaire à Free Marker中文文档 (20)

[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務[系列活動] 手把手教你R語言資料分析實務
[系列活動] 手把手教你R語言資料分析實務
 
Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight Practical data analysis in R: from data collection to data insight
Practical data analysis in R: from data collection to data insight
 
Practical Data Analysis in R
Practical Data Analysis in RPractical Data Analysis in R
Practical Data Analysis in R
 
Lotus domino开发教程
Lotus domino开发教程Lotus domino开发教程
Lotus domino开发教程
 
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
 
Ch10
Ch10Ch10
Ch10
 
Ch10 教學
Ch10 教學Ch10 教學
Ch10 教學
 
浏览器工作原理浅析
浏览器工作原理浅析浏览器工作原理浅析
浏览器工作原理浅析
 
旺铺前端设计和实现
旺铺前端设计和实现旺铺前端设计和实现
旺铺前端设计和实现
 
数据处理算法设计要点
数据处理算法设计要点数据处理算法设计要点
数据处理算法设计要点
 
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
Java SE 8 的 Lambda 連鎖效應 - 語法、風格與程式庫
 
Mongo快速入门
Mongo快速入门Mongo快速入门
Mongo快速入门
 
1 C入門教學
1  C入門教學1  C入門教學
1 C入門教學
 
認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算認識 C++11 新標準及使用 AMP 函式庫作平行運算
認識 C++11 新標準及使用 AMP 函式庫作平行運算
 
C++工程实践
C++工程实践C++工程实践
C++工程实践
 
Python速成指南
Python速成指南Python速成指南
Python速成指南
 
希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范希望科技研发部变量命名及编码规范
希望科技研发部变量命名及编码规范
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 

Plus de yiditushe

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册yiditushe
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2yiditushe
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1yiditushe
 
性能测试技术
性能测试技术性能测试技术
性能测试技术yiditushe
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术yiditushe
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试yiditushe
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训yiditushe
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程yiditushe
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Luceneyiditushe
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍yiditushe
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Actionyiditushe
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1yiditushe
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demoyiditushe
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践yiditushe
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析yiditushe
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则yiditushe
 
10 团队开发
10  团队开发10  团队开发
10 团队开发yiditushe
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模yiditushe
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模yiditushe
 

Plus de yiditushe (20)

Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册
 
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2
 
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1
 
性能测试技术
性能测试技术性能测试技术
性能测试技术
 
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术
 
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试
 
面向对象的Js培训
面向对象的Js培训面向对象的Js培训
面向对象的Js培训
 
Flex3中文教程
Flex3中文教程Flex3中文教程
Flex3中文教程
 
开放源代码的全文检索Lucene
开放源代码的全文检索Lucene开放源代码的全文检索Lucene
开放源代码的全文检索Lucene
 
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍
 
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
 
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
 
Lucene2 4 Demo
Lucene2 4 DemoLucene2 4 Demo
Lucene2 4 Demo
 
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
 
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析
 
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则
 
10 团队开发
10  团队开发10  团队开发
10 团队开发
 
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模
 
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模
 

Free Marker中文文档

  • 1. FreeMarker 概述  FreeMarker 是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯 Java 编写  FreeMarker 被 设 计用 来 生 成 HTML Web 页 面 ,特 别 是 基于 MVC 模 式 的应 用 程 序  虽 然 FreeMarker 具 有 一 些 编 程 的 能 力 , 但 通 常 由 Java 程 序 准 备 要 显 示 的 数 据 由 FreeMarker 生 成 页 面 , 通 过 模 板 显 示 准 备 的 数 据 ( 如 下 图 )  FreeMarker 不是一个 Web 应用框架,而适合作为 Web 应用框架一个组件  FreeMarker 与容 器无关, 因为它并 不知道 HTTP 或 Servlet;FreeMarker 同样可 以应用于非 Web 应用程序环境  FreeMarker 更适合作为 Model2 框架(如 Struts)的视图组件,你也可以在模板 中使用 JSP 标记库  FreeMarker 是免费的 1、通用目标  能够生成各种文本:HTML、XML、RTF、Java 源代码等等  易于嵌入到你的产品中:轻量级;不需要 Servlet 环境  插件式模板载入器:可以从任何源载入模板,如本地文件、数据库等等  你可以按你所需生成文本:保存到本地文件;作为 Email 发送;从 Web 应用程序发送 它返回给 Web 浏览器 2、强大的模板语言  所有常用的指令:include、if/elseif/else、循环结构  在模板中创建和改变变量  几乎在任何地方都可以使用复杂表达式来指定值  命名的宏,可以具有位置参数和嵌套内容  名字空间有助于建立和维护可重用的宏库,或者将一个大工程分成模块,而不必担心 名字冲突  输出转换块:在嵌套模板片段生成输出时,转换 HTML 转义、压缩、语法高亮等等; 你可以定义自己的转换 3、通用数据模型  FreeMarker 不是直接反射到 Java 对象,Java 对象通过插件式对象封装,以变量方式在 模板中显示  你可以使用抽象(接口)方式表示对象(JavaBean、XML 文档、SQL 查询结果集等 等),告诉模板开发者使用方法,使其不受技术细节的打扰 4、为 Web 准备  在模板语言中内建处理典型 Web 相关任务(如 HTML 转义)的结构  能够集成到 Model2 Web 应用框架中作为 JSP 的替代
  • 2. </#list> </table> FreeMarker 设计指南(3)
  • 3. </#list> 输出结果是: - Joe - Fred - Julia - Kate  散列操作  连接操作:和字符串一样,使用+,如果具有相同的 key,右边的值替代左边的值,例如: <#assign ages = {"Joe":23, "Fred":25} + {"Joe":30, "Julia":18}> - Joe is ${ages.Joe} - Fred is ${ages.Fred} - Julia is ${ages.Julia} 输出结果是: - Joe is 30 - Fred is 25 - Julia is 18  算术运算  +、-、×、/、%,下面是一个例子: ${x * x - 100} ${x / 2} ${12 % 10} 输出结果是(假设 x 为 5): -75 2.5 2  操作符两边必须是数字,因此下面的代码是错误的: ${3 * "5"} <#-- WRONG! -->  使用+操作符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串,例如: ${3 + "5"} 输出结果是: 35  使用内建的 int(后面讲述)获得整数部分,例如: ${(x/2)?int} ${1.1?int} ${1.999?int} ${-1.1?int} ${-1.999?int} 输出结果是(假设 x 为 5): 2
  • 5. </#list> ${x} </#list> 输出结果: loop 1 loop 2 loop 3 loop 2 loop 1  模板中的变量会隐藏(而不是覆盖)数据模型中同名变量,如果需要访问数据模 型中的同名变量,使用特殊变量 global,下面的例子假设数据模型中的 user 的值是 Big Joe: <#assign user = "Joe Hider"> ${user} <#-- prints: Joe Hider --> ${.globals.user} <#-- prints: Big Joe --> (3)名字空间  通常情况,只使用一个名字空间,称为主名字空间  为了创建可重用的宏、 变换器或其它变量的集合(通常称库),必须使用多名字空 间,其目的是防止同名冲突  创建库  下面是一个创建库的例子(假设保存在 lib/my_test.ftl 中): <#macro copyright date> <p>Copyright (C) ${date} Julia Smith. All rights reserved. <br>Email: ${mail}</p> </#macro> <#assign mail = "jsmith@acme.com">  使用 import 指令导入库到模板中,Freemarker 会为导入的库创建新的名字空 间,并可以通过 import 指令中指定的散列变量访问库中的变量: <#import "/lib/my_test.ftl" as my> <#assign mail="fred@acme.com"> <@my.copyright date="1999-2002"/> ${my.mail} ${mail} 输出结果: <p>Copyright (C) 1999-2002 Julia Smith. All rights reserved. <br>Email: jsmith@acme.com</p> jsmith@acme.com fred@acme.com 可以看到例子中使用的两个同名变量并没有冲突,因为它们位于不同的名字空间
  • 6. Freemarker - 几个比较实用的例子 - - 用 Freemarker 做 模 本 语 言 有 一段时间了,列出几个和 JSP 或者 Velocity 相比起来比较方便的用 途 , 目 的 是 引 诱 更 多 的 人 跳 上 Freemarker 这 个 贼 船 , 1. String 内 置 的 JavaScript 转 换 : js_string 用 途 : 用 于 JavaScript 转 义 , 转 换 ',", 换 行 等 特 殊 字 符 模 板 : <script> alert("${errorMessage?js_string}"); </script> 输 出 : <script> alert("Readonly's pet name is "Cross Bone""); </script>
  • 7. 2. 内 置 的 默 认 值 处 理 : default 用 途 : 用 于 处 理 默 认 值 模 本 : User: ${userLogin.name?default("Anonymous")} <td>${(employee.department.manager.name)?default(" ")}</td> 输 出 : User: Anonymous <td> </td> 注,可以对整个对象树加上(),再用内置处理器这种方便的做法, 偶 也 是 最 近 刚 学 会 的 , 以 前 一 直 用 很 傻 的 方 法 做 ..... 3. Sequence 内 置 的 计 数 器 : xxx_index
  • 8. 途 : 显 示 序 号 模 板 : <#list employees as e> ${e_index}. ${e.name} </#list> 输 出 : 1. Readonly 2. Robbin 4. Sequence 内 置 的 分 段 器 : chunk 用 途 : 某 些 比 较 BT 的 排 版 需 求 模 板 : <#assign seq = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']> <#list seq?chunk(4) as row> <ul>
  • 9. <li><#list row as cell>${cell} </#list></li> </ul> </#list> <#list seq?chunk(4, '-') as row> <tr> <td><#list row as cell>${cell} </#list></td> </tr> </#list> 输 出 : <ul> <li>a</li> <li>b</li> <li>c</li> <li>d</li> </ul> <ul> <li>e</li> <li>f</li>