`
weiwu83
  • 浏览: 191350 次
  • 来自: ...
社区版块
存档分类
最新评论

FreeMarker开发指南

    博客分类:
  • view
阅读更多
1概念
2指令
if, else, elseif 
switch, case, default, break
list, break 
include 
Import 
compress 
escape, noescape 
assign 
global 
setting 
macro, nested, return
t, lt, rt 
3一些常用方法或注意事项 
表达式转换类 
数字循环 
对浮点取整数 
给变量默认值 
判断对象是不是null 
常用格式化日期 
添加全局共享变量数据模型 
直接调用java对象的方法 
字符串处理(内置方法) 
在模板里对sequences和hashes初始化 
注释标志 
sequences内置方法 
hashes内置方法 
4 freemarker在web开发中注意事项 
web中常用的几个对象 
view中值的搜索顺序 
在模板里ftl里使用标签 
如何初始化共享变量 
与webwork整合配置 
5高级方法 
自定义方法 
自定义 Transforms 

                                 
1概念
最常用的3个概念
sequence  序列,对应java里的list、数组等非键值对的集合
hash      键值对的集合
namespace 对一个ftl文件的引用,利用这个名字可以访问到该ftl文件的资源

2指令
if, else, elseif
语法
<#if condition>
  ...
<#elseif condition2>
  ...
<#elseif condition3>
  ...
...
<#else>
  ...

用例
<#if x = 1>
  x is 1

<#if x = 1>
  x is 1
<#else>
  x is not 1

switch, case, default, break
语法
<#switch value>
  <#case refValue1>
    ...
    <#break>
  <#case refValue2>
    ...
    <#break>
  ...
  <#case refValueN>
    ...
    <#break>
  <#default>
    ...

用例
字符串
<#switch being.size>
  <#case "small">
     This will be processed if it is small
     <#break>
  <#case "medium">
     This will be processed if it is medium
     <#break>
  <#case "large">
     This will be processed if it is large
     <#break>
  <#default>
     This will be processed if it is neither

数字
<#switch x>
  <#case x = 1>
    1
  <#case x = 2>
    2
  <#default>
    d

如果x=1 输出 1 2, x=2输出 2, x=3 输出d

list, break
语法
<#list sequence as item>
...
<#if item = "spring"><#break>
...

关键字
item_index:是list当前值的下标
item_has_next:判断list是否还有值

用例
<#assign seq = ["winter", "spring", "summer", "autumn"]>
<#list seq as x>
  ${x_index + 1}. ${x}<#if x_has_next>,

输出
  1. winter,
  2. spring,
  3. summer,
  4. autumn  


include
语法
<#include filename>
or
<#include filename options>
options包含两个属性
encoding=”GBK” 编码格式
parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse=”true”
用例
/common/copyright.ftl包含内容
Copyright 2001-2002 ${me}

All rights reserved. 
模板文件
<#assign me = "Juila Smith">

Some test


Yeah.



<#include "/common/copyright.ftl" encoding=”GBK”>
输出结果

Some test


Yeah.



Copyright 2001-2002 Juila Smith
All rights reserved. 

 

Import
语法
<#import path as hash>
类似于java里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件

用例

假设mylib.ftl里定义了宏copyright那么我们在其他模板页面里可以这样使用
<#import "/libs/mylib.ftl" as my>

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

"my"在freemarker里被称作namespace

compress
语法
<#compress>
  ...

用来压缩空白空间和空白的行
用例
<#assign x = "    moo  \n\n   ">
(<#compress>
  1 2  3   4    5
  ${moo}
  test only

  I said, test only


输出
(1 2 3 4 5
moo
test only
I said, test only)
escape, noescape
语法
<#escape identifier as expression>
  ...
  <#noescape>...
  ...

用例
主要使用在相似的字符串变量输出,比如某一个模块的所有字符串输出都必须是html安全的,这个时候就可以使用该表达式
<#escape x as x?html>
  First name: ${firstName}
  <#noescape>Last name: ${lastName}
  Maiden name: ${maidenName}

相同表达式 
  First name: ${firstName?html}
  Last name: ${lastName }
  Maiden name: ${maidenName?html}
assign
语法
<#assign name=value>
or
<#assign name1=value1 name2=value2 ... nameN=valueN>
or
<#assign same as above... in namespacehash>
or
<#assign name>
  capture this

or
<#assign name in namespacehash>
  capture this

用例
生成变量,并且给变量赋值
给seasons赋予序列值
<#assign seasons = ["winter", "spring", "summer", "autumn"]>

给变量test加1
<#assign test = test + 1>

给my namespage 赋予一个变量bgColor,下面可以通过my.bgColor来访问这个变量
<#import "/mylib.ftl" as my>
<#assign bgColor="red" in my>

将一段输出的文本作为变量保存在x里
下面的阴影部分输出的文本将被赋值给x
<#assign x>
  <#list 1..3 as n>
    ${n} <@myMacro />
 

Number of words: ${x?word_list?size}
${x}

<#assign x>Hello ${user}!     error
<#assign x=” Hello ${user}!”>         true

同时也支持中文赋值,如:
<#assign 语法>
  java

${语法}
打印输出:
java
global
语法
<#global name=value>
or
<#global name1=value1 name2=value2 ... nameN=valueN>
or
<#global name>
  capture this

全局赋值语法,利用这个语法给变量赋值,那么这个变量在所有的namespace中是可见的,如果这个变量被当前的assign语法覆盖 如<#global x=2> <#assign x=1> 在当前页面里x=2将被隐藏,或者通过${.global.x}来访问

setting
语法
<#setting name=value>
用来设置整个系统的一个环境
locale
number_format
boolean_format
date_format, time_format, datetime_format
time_zone
classic_compatible
用例
假如当前是匈牙利的设置,然后修改成美国
${1.2}
<#setting locale="en_US">
${1.2} 
输出
1,2
1.2
因为匈牙利是采用“,”作为十进制的分隔符,美国是用“.”

 

macro, nested, return
语法

<#macro name param1 param2 ... paramN>
  ...
  <#nested loopvar1, loopvar2, ..., loopvarN>
  ...
  <#return>
  ...

用例
<#macro test foo bar="Bar" baaz=-1>
  Test text, and the params: ${foo}, ${bar}, ${baaz}

<@test foo="a" bar="b" baaz=5*5-2/>
<@test foo="a" bar="b"/>
<@test foo="a" baaz=5*5-2/>
<@test foo="a"/>
输出
  Test text, and the params: a, b, 23
  Test text, and the params: a, b, -1
  Test text, and the params: a, Bar, 23
  Test text, and the params: a, Bar, -1
定义循环输出的宏
<#macro list title items>
 

${title?cap_first}:
 


        <#list items as x>
         
  • ${x?cap_first}
       
     


<@list items=["mouse", "elephant", "python"] title="Animals"/>
输出结果 

Animals:
 


         
  • Mouse
         
  • Elephant
         
  • Python
     

包含body的宏
<#macro repeat count>
  <#list 1..count as x>
    <#nested x, x/2, x==count>
 

<@repeat count=4 ; c halfc last>
  ${c}. ${halfc}<#if last> Last!
</@repeat>
输出
1. 0.5
  2. 1
  3. 1.5
  4. 2 Last!

 

 


t, lt, rt
语法
<#t> 去掉左右空白和回车换行

<#lt>去掉左边空白和回车换行

<#rt>去掉右边空白和回车换行

<#nt>取消上面的效果


3一些常用方法或注意事项


表达式转换类
${expression}计算expression并输出
#{ expression }数字计算#{ expression ;format}安格式输出数字format为M和m
M表示小数点后最多的位数,m表示小数点后最少的位数如#{121.2322;m2M2}输出121.23

 


数字循环
1..5 表示从1到5,原型number..number
对浮点取整数
${123.23?int} 输出123
给变量默认值
${var?default(“hello world
”)?html}如果var is null那么将会被hello world
替代

判断对象是不是null
    <#if mouse?exists>
      Mouse found
<#else>
也可以直接${mouse?if_exists})输出布尔形
常用格式化日期
 openingTime必须是Date型,详细查看freemarker文档 Reference->build-in referece->build-in for date

${openingTime?date}
${openingTime?date_time}
${openingTime?time}

添加全局共享变量数据模型
在代码里的实现
    cfg = Configuration.getDefaultConfiguration();
cfg.setSharedVariable("global", "you good");
页面实现可以通过global指令,具体查看指令里的global部分
直接调用java对象的方法
${object.methed(args)} 

字符串处理(内置方法)
html安全输出
“abc

分享到:
评论
2 楼 cx921138 2007-09-07  
<#switch x>
  <#case x = 1>
    1
  <#case x = 2>
    2
  <#default>
    d
</#switch>

这样写,会不会当值类型冲突啊

Left  hand operand is a freemarker.ext.beans.NumberModel
Right hand operand is a freemarker.template.TemplateBooleanModel$1

直接用

<#switch x>
  <#case 1>
    1
  <#case 2>
    2
  <#default>
    d
</#switch>

安全
1 楼 cx921138 2007-09-07  
非常感谢!

相关推荐

    Freemarker开发指南

    ### Freemarker开发指南知识点 #### 1. 概述 - **定义**: Freemarker 是一个用纯 Java 编写的模板引擎,主要用于根据模板生成文本输出。它可以用来生成 HTML Web 页面,尤其是在 MVC 架构中非常实用。 - **设计...

    freemark开发指南详解

    以下是对FreeMarker开发指南中涉及的一些关键知识点的详细解释: 1. **基础概念**: - **Scalars**:存储单一值的数据类型,如字符串、数字、日期和布尔值。 - **Hashes**:存储键值对的容器,用于组织和检索数据...

    FreeMarker指南

    ### FreeMarker设计指南详解 #### 一、FreeMarker概述 FreeMarker是一个强大的模板引擎,用于将数据模型与表现层分离,使得设计者可以专注于页面布局和样式,而程序员则负责处理业务逻辑和数据处理。其核心思想是...

    FreeMarker

    "FreeMarker开发指南.doc"则可能深入到更具体的开发实践,比如如何在Java应用中集成FreeMarker,设置配置参数,处理异常,优化性能,以及与Spring、Struts等框架的整合。此外,指南可能会涵盖如何调试模板,以及在...

    Freemarker模版开发指南

    本指南将深入探讨Freemarker模板的开发,帮助你掌握其主要特性和用法。 1. **模板语法** Freemarker的模板语言基于简单的文本文件,使用特定的指令和表达式。例如,`&lt;#if&gt;`用于条件判断,`&lt;#foreach&gt;`用于循环,`$...

    FreeMarker设计指南.ppt

    这个“FreeMarker设计指南.ppt”文件很可能是关于如何有效地使用FreeMarker进行模板设计和编程的一份详细教程。以下是FreeMarker的一些核心知识点和相关概念: 1. **模板语言**:FreeMarker是基于文本的模板语言,...

    freemarker资料汇总

    首先,我们来看《Freemarker开发指南》。这是一份详尽的教程,涵盖了Freemarker的基本概念、安装、配置以及如何在实际项目中使用。它会介绍如何创建模板,如何在模板中插入和控制变量,以及如何使用条件语句和循环...

    FreeMarker 设计指南

    FreeMarker 是一个强大的模板引擎,常用于Web应用中的...理解并熟练掌握FreeMarker的使用,对于提升Web应用的开发效率和用户体验具有重要意义。通过阅读《FreeMarker设计指南》PDF,你可以更深入地学习和掌握这一技术。

    FreeMarker入门指南(详细指南见附件)

    这篇《FreeMarker入门指南》将深入介绍其基本概念、语法以及在实际项目中的应用。 一、FreeMarker简介 FreeMarker是一个基于模板的Java库,用于生成文本输出。它的主要工作原理是将模板(template)与数据模型...

    FreeMarker设计指南1

    本设计指南将深入讲解FreeMarker的一些关键特性。 1. **数字和日期支持**:FreeMarker能够对不同类型的数字进行算术运算和比较,包括精度类型。同时,它还能处理日期和时间值的比较和格式化,适应国际化需求。 2. ...

    FreeMarker学习指南

    总的来说,FreeMarker是一个强大的工具,它简化了动态内容的生成,使得设计人员和开发人员能够各自专注于他们的专业领域,从而提高效率和协作效果。通过理解FreeMarker的基本概念,如模板、数据模型以及各种数据类型...

    FreeMarker设计指南(PDF版)

    ### FreeMarker设计指南知识点解析 #### 一、FreeMarker简介 **FreeMarker**是一个功能强大的模板引擎,专门用于基于模板生成各类文本输出。该工具完全采用纯Java编写,旨在简化HTML网页的生成过程,尤其适用于...

    FreeMarker设计指南+概述(doc)

    FreeMarker是一款强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,尤其在Web应用开发中被广泛使用。它与Java语言紧密集成,但设计时尽量避免了直接接触Java代码,使得模板作者可以专注于...

    FreeMarker设计指南(完整整理)

    这篇“FreeMarker设计指南(完整整理)”将深入解析其设计理念、核心概念和实际应用。 首先,FreeMarker是一个基于模板的解决方案,它的核心思想是分离业务逻辑和视图展示。这意味着开发者可以在不改动业务代码的情况...

    FreeMarker中文手册+开发指南.docx

    总的来说,FreeMarker中文手册和开发指南是开发者深入学习和熟练掌握FreeMarker的宝贵资源,无论你是初学者还是经验丰富的开发者,都能从中找到你需要的信息。通过这份文档,你可以有效地将数据转化为动态、吸引人的...

    freemarker 操作指南(完全版)

    这份"Freemarker操作指南(完全版)"包含了所有关于Freemarker的详细操作文档,是初学者掌握和进阶Freemarker的宝贵资料。 在开始学习之前,我们先了解Freemarker的基本概念。Freemarker是一个模板引擎,它允许...

Global site tag (gtag.js) - Google Analytics