??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合区图片小说区,亚洲美女自拍视频,日本久久久久亚洲中字幕http://www.tkk7.com/ywj-316/category/42562.htmlzh-cnFri, 29 Oct 2010 18:10:34 GMTFri, 29 Oct 2010 18:10:34 GMT60Freemarker的内|函数及(qing)用法(?http://www.tkk7.com/ywj-316/archive/2009/11/25/303592.htmljunlyjunlyWed, 25 Nov 2009 03:21:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/11/25/303592.htmlhttp://www.tkk7.com/ywj-316/comments/303592.htmlhttp://www.tkk7.com/ywj-316/archive/2009/11/25/303592.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/303592.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/303592.html一?nbsp;Sequence的内|函?/span>

1.     sequence?first q回sequence的第一个倹{?/span>

2.     sequence?last q回sequence的最后一个倹{?/span>

3.     sequence?reverse sequence的现有顺序反转,卛_序排序

4.     sequence?size    q回sequence的大?/span>

5.     sequence?sort    sequence中的对象转化为字W串后顺序排?/span>

6.     sequence?sort_by(value) 按sequence中对象的属性valueq行排序

注意QSequence不能为null。以上方法在我的另一博客Freemarker中如何遍历List有详l的应用Q感兴趣的朋友可以参考?/span>

二?span style="font: 7pt 'Times New Roman'">          Hash的内|函?/span>

1.                     hash?keys q回hash里的所有key,q回l果为sequence

2.                     hash?values q回hash里的所有value,q回l果为sequence

例如Q?/span>

<#assign user={“name”:“hailang”, “sex”:“man”}>

            <#assign keys=user?keys>

            <#list keys as key>

                ${key}=${user[key]}

            </#list>

三?span style="font: 7pt 'Times New Roman'">          操作字符串函?/span>

1.                     substringQstart,endQ从一个字W串中截取子?/span>

start:截取子串开始的索引Qstart必须大于{于0Q小于等于end

end: 截取子串的长度,end必须大于{于0Q小于等于字W串长度Q如果省略该参数Q默认ؓ(f)字符串长度?/span>

例子Q?/span>

${‘str’?substring(0)}àl果为str

${‘str’?substring(1)}àl果为tr

${‘str’?substring(2)}àl果为r

${‘str’?substring(3)}àl果?/span>

${‘str’?substring(0,0)}àl果?/span>

${‘str’?substring(0,1)}àl果为s

${‘str’?substring(0,2)}àl果为st

${‘str’?substring(0,3)}àl果为str

2.                     cap_first 字W串中的W一个单词的首字母变为大写?/span>

${‘str’Qcap_first}àl果为Str

3.                     uncap_first字W串中的W一个单词的首字母变为小写?/span>

${‘Str’Qcap_first}àl果为str

4.                     capitalize字W串中的所有单词的首字母变为大?/span>

${‘str’Q?capitalize}àl果为STR

5.                     date,timeQdatetime字W串转换为日?/span>

例如Q?/span>

<#assign date1=”2009-10-12”?date(“yyyy-MM-dd”)>

<#assign date2=”9:28:20”?time(“HH:mm:ss”)>

<#assign date3=” 2009-10-12 9:28:20”?time(“HH:mm:ss”)>

${date1}àl果?009-10-12

${date2}àl果?:28:20

${date3}àl果?009-10-12 9:28:20

注意Q如果指定的字符串格式不正确引发错误?/span>

6.                     ends_with 判断某个字符串是否由某个子串l尾Q返回布?yu)(dng)倹{?/span>

${“string”?ends_with(“ing”)?string} q回l果为true

注意Q布?yu)(dng)值必{换ؓ(f)字符串才能输?/span>

7.                     html 用于字W串中的<?gt;?amp;?#8220;替换为对应得&lt;&gt;&quot:&amp

8.                     index_ofQsubstring,startQ在字符串中查找某个子串Q返回找到子串的W一个字W的索引Q如果没有找到子Ԍ则返?1?/span>

 Start参数用于指定从字W串的那个烦(ch)引处开始搜索,start为数字倹{?/span>

 如果start大于字符串长度,则start取值等于字W串长度Q如果start于0Q?则start取gؓ(f)0?/span>

 ${“string”?index_of(“in”) àl果?

${“string”?index_of(“ab”) àl果?1

9.                     lengthq回字符串的长度 ${“string”?length}àl果?

10.                  lower_case字W串转ؓ(f)写

${“STRING”?lower_case}àl果为string

11.                  upper_case字W串转ؓ(f)大写

${“string”?upper_case}àl果为STRING

12.                  contains 判断字符中是否包含某个子丌Ӏ返回布?yu)(dng)?/span>

 ${“string”?contains(“ing”)?string} àl果为true

    注意Q布?yu)(dng)值必{换ؓ(f)字符串才能输?/span>

13.                  number字W串转换为数?/span>

${“111.11”?number}àl果?11.11

14.                  replace用于字W串中的一部分从左到右替换为另外的字符丌Ӏ?/span>

${“strabg”?replace(“ab”,”in”)} àl果为string

15.                   split使用指定的分隔符一个字W串拆分Zl字W串

<#list “This|is|split”?split(“|”) as s>

    ${s}

</#list>

l果?

This

is

split

16.                  trim 删除字符串首?${“ String ”?trim} àl果为String

 

四?span style="font: 7pt 'Times New Roman'">          操作数字

1.                     c 用于数字{换ؓ(f)字符?/span>

${123?c} àl果?23

2.                     string用于数字{换ؓ(f)字符?/span>

Freemarker中预订义?jin)三U数字格式:(x)number,currencyQ货币)(j)和percent(癑ֈ?其中number为默认的数字格式转换

例如Q?nbsp;

<#assign tempNum=20>

${tempNum}   

${tempNum?string.number}?{tempNum?string(“number”)} àl果?0

${tempNum?string.currency}?{tempNum?string(“currency”)} àl果为E20.00

${tempNum?string. percent}?{tempNum?string(“percent”)} àl果?,000%

五?span style="font: 7pt 'Times New Roman'">    操作布尔?/span>

string 用于布?yu)(dng)D{换ؓ(f)字符串输?/span>

true转ؓ(f)“true”Qfalse转换?#8220;false”

foo?string(“yes”,”no”)如果布尔值是true,那么q回“yes”,否则q回no

 

    通过上面对开发中常用的Freemarker内置函数?qing)用法的介绍Q相信?zhn)已经对这些函数的有?jin)一定的?jin)解Q希望本文能Ҏ(gu)的开发有所帮助。由于时间仓?j),有不之处请?zhn)批评指正?/span>



junly 2009-11-25 11:21 发表评论
]]>
FreeMarker处理集合http://www.tkk7.com/ywj-316/archive/2009/11/25/303563.htmljunlyjunlyWed, 25 Nov 2009 02:06:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/11/25/303563.htmlhttp://www.tkk7.com/ywj-316/comments/303563.htmlhttp://www.tkk7.com/ywj-316/archive/2009/11/25/303563.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/303563.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/303563.html集合

集合以方括号包括,各集合元素之间以英文逗号","分隔,看如下的例子:
<#list ["星期一", "星期?, "星期?, "星期?, "星期?, "星期?, "星期?] as x>
${x}
</#list>
输出l果?
星期一
星期?br /> 星期?br /> 星期?br /> 星期?br /> 星期?br /> 星期?

除此之外,集合元素也可以是表达?例子如下:
[2 + 2, [1, 2, 3, 4], "whatnot"]

q可以用数字范围定义数字集??..5{同于[2, 3, 4, 5],但是更有效率.注意,使用数字范围来定义集合时无需使用Ҏ(gu)?数字范围也支持反递增的数字范??..2

Map对象

Map对象使用花括号包?Map中的key-value对之间以英文冒号":"分隔,多组key-value对之间以英文逗号","分隔.下面是一个例?
{"语文":78, "数学":80}
Map对象的key和value都是表达?但是key必须是字W串


输出变量?/span>

FreeMarker的表辑ּ输出变量?q些变量可以是顶层变?也可以是Map对象中的变量,q可以是集合中的变量,q可以用点(.)语法来访问Java对象的属?下面分别讨论q些情况

1,层变量
所谓顶层变量就是直接放在数据模型中的?例如有如下数据模?
Map root = new HashMap();   //创徏数据模型
root.put("name","annlee");   //name是一个顶层变?/p>

对于层变量,直接使用${variableName}来输出变量?变量名只能是字母,数字,下划U?$,@?的组?且不能以数字开头号.Z(jin)输出上面的name的?可以使用如下语法:
${name}

2,输出集合元素
如果需要输出集合元?则可以根据集合元素的索引来输出集合元?集合元素的烦(ch)引以Ҏ(gu)h?假设有烦(ch)?
["星期一","星期?,"星期?,"星期?,"星期?,"星期?,"星期?].该烦(ch)引名为week,如果需要输出星期三,则可以用如下语?
${week[2]}   //输出W三个集合元?/p>

此外,FreeMarkerq支持返回集合的子集?如果需要返回集合的子集?则可以用如下语?
week[3..5]   //q回week集合的子集合,子集合中的元素是week集合中的W?-6个元?/p>

3,输出Map元素
q里的Map对象可以是直接HashMap的实?甚至包括JavaBean实例,对于JavaBean实例而言,我们一样可以把其当成属性ؓ(f)key,属性gؓ(f)value的Map实例.Z(jin)输出Map元素的?可以使用点语法或Ҏ(gu)可?假如有下面的数据模型:
Map root = new HashMap();
Book book = new Book();
Author author = new Author();
author.setName("annlee");
author.setAddress("gz");
book.setName("struts2");
book.setAuthor(author);
root.put("info","struts");
root.put("book", book);

Z(jin)讉K数据模型中名为struts2的书的作者的名字,可以使用如下语法:
book.author.name    //全部使用点语?br /> book["author"].name
book.author["name"]    //混合使用点语法和Ҏ(gu)可?br /> book["author"]["name"]   //全部使用Ҏ(gu)可?/p>

使用点语法时,变量名字有顶层变量一L(fng)限制,但方括号语法没有该限?因ؓ(f)名字可以是Q意表辑ּ的结?

集合q接q算W?

q里所说的集合q算W是两个集合连接成一个新的集?q接集合的运符?,看如下的例子:
<#list ["星期一","星期?,"星期?] + ["星期?,"星期?,"星期?,"星期?] as x>
${x}
</#list>
输出l果?星期一 星期?星期?星期?星期?星期?星期?/p>

Mapq接q算W?/span>

Map对象的连接运符也是两个Map对象q接成一个新的Map对象,Map对象的连接运符?,如果两个Map对象h相同的key,则右边的值替代左边的?看如下的例子:
<#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}>
语文成W?{scores.语文}
数学成W?{scores.数学}
Java成W?{scores.Java}
输出l果?
语文成W?6
数学成W?7
Java成W?3



junly 2009-11-25 10:06 发表评论
]]>
FreeMarker整合Struts2http://www.tkk7.com/ywj-316/archive/2009/11/05/301275.htmljunlyjunlyThu, 05 Nov 2009 07:00:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/11/05/301275.htmlhttp://www.tkk7.com/ywj-316/comments/301275.htmlhttp://www.tkk7.com/ywj-316/archive/2009/11/05/301275.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/301275.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/301275.htmlQ?解压struts2-core-X.X.X.jar文gQ把在META-INF文g夹下面的struts-tags.tld文g复制到WEB-INF文g夹下?br />      freemark的jar导入到工E中

Q?在web.xml文g中配|freemark同时启动JSPSupportServlet.代码如下Q?/p>

<servlet>
        
<servlet-name>freemarker</servlet-name>
        
<servlet-class>
            freemarker.ext.servlet.FreemarkerServlet
        
</servlet-class>
        
<!--下面的配|freemarke的ftl文g的位|?nbsp;-->
        
<init-param>
            
<param-name>TemplatePath</param-name>
            
<param-value>/</param-value>
        
</init-param>
        
<!-- 是否和服务器Qtommcat)一起启动?Z?为是-->
        
<load-on-startup>1</load-on-startup>
    
</servlet>

    
<servlet-mapping>
        
<servlet-name>freemarker</servlet-name>
        
<url-pattern>*.ftl</url-pattern>
    
</servlet-mapping>


<servlet>
  
<!-- define a JspSupportServlet Object -->
  
<servlet-name>JspSupportServlet</servlet-name>
  
<servlet-class>org.apache.struts2.views.JspSupportServlet</servlet-class>
  
<!-- setting JspSupportServlet auto start -->
  
<load-on-startup>1</load-on-startup>
 
</servlet>

Q?在FreeMarker模板中用assign指o(h)导入标签库。代码如?/p>

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] /> 注:(x)q里我把struts-tags.tld攑֜WEB-INF下面

4.现在我们可以在FreeMarker模板中用标{了(jin)
CZ代码如下Q?/p>

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<@s.form action="login">
 
<@s.textfield name="username" label="username"/>
 
<@s.submit value="login" />
/@s.form

<!-- login.ftl代码如下 -->

<#assign s=JspTaglibs["/WEB-INF/struts-tags.tld"] />
<html>
<head>
<title>Login Form</title>
</head>
<body>
please input username and password login
<br>
<@s.form action="Login.action">
 
<@s.textfield name="username" label="username"/>
 
<@s.password name="password" label="password" />
 
<@s.submit value="submit" />
</@s.form>
</body>
</html>

 

<!-- welcome.ftl代码如下Q?nbsp;-->

<html>
<head>
<title>Success</title>
</haed>
<body>
WelCome,${username},you logined!
<br>
<href="ShowInfo.action">Show Information</a>
</body>
</html>

 

<!-- showinfo.ftl代码如下Q?nbsp;-->

<html>
<head>
<title>User Information</title>
<body>
<table border="1" width="360">
<caption>User Information</caption>

<tr>
<td>username:</td>
<td>${username}</td>
</tr>
<tr>
<td>sex:</td>
<td>${sex}</td>
</tr>
<tr>
<td>age:</td>
<td>${age}</td>
</tr>
</table>
</body>
</html>



junly 2009-11-05 15:00 发表评论
]]>
Freemark 开发指?|上扄)http://www.tkk7.com/ywj-316/archive/2009/11/03/300864.htmljunlyjunlyTue, 03 Nov 2009 03:12:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/11/03/300864.htmlhttp://www.tkk7.com/ywj-316/comments/300864.htmlhttp://www.tkk7.com/ywj-316/archive/2009/11/03/300864.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/300864.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/300864.html阅读全文

junly 2009-11-03 11:12 发表评论
]]>
freemarker高1http://www.tkk7.com/ywj-316/archive/2009/11/02/300768.htmljunlyjunlyMon, 02 Nov 2009 09:41:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/11/02/300768.htmlhttp://www.tkk7.com/ywj-316/comments/300768.htmlhttp://www.tkk7.com/ywj-316/archive/2009/11/02/300768.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/300768.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/300768.html 能够文本的D析ؓ(f)宏,cM动态指令用法如?
<#assign x=["a", "b", "c"]>
<#assign templateSource = "<#list x as y>${y}</#list>">
<#assign inlineTemplate = templateSource?interpret>
<@inlineTemplate /> 

其中"<#list x as y>${y}</#list>"可以是从数据库中d出来的指?


2, ?new
创徏一个java对象
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new()>
q可以在new的时候加参数Q如
<#assign word_wrapp = "com.acmee.freemarker.WordWrapperDirective"?new(40)>

3Q?!!??
两个写符P可以让我L(fng)(sh)~(L(fng)懒)(j)
${obj.name!!}  =  ${obj.name?default('')}
<#if obj?? >   =  <#if obj?exists>


4, ; in macro ?nest的参?
原本以ؓ(f)<#nest/>不能加参敎ͼ在构造模板时费了(jin)一些劲Q原来可以用Q在引用macro时给nest传参?

<@repeat count=4 ; c, halfc, last>   
  ${c}.${halfc}
<#if last> Last!</#if>   
</@repeat>   
<@repeat count=4 ; c, halfc>   
  ${c}.${halfc}   
</@repeat>   
<@repeat count=4>   
  
Just repeat it   
</@repeat
>    

5Q?include里的通配W?
好像可以应对不固定文件夹层路径的写法,但具体没用过
<#include "*/footer.ftl">  
匚w如下
/foo/bar/footer.ftl
/foo/footer.ftl
/footer.ftl

6    字符串{换ؓ(f)数字
<#assign width="234"/>
<#assign widthNum=width?eval/>

7  split字符?br />
<#assign arr = o[2]?split(',')>
            
<#list arr as a>
            
<@selArea selName="select1" selId="select1" selvalue=(a?eval) userArea=1010 />
            
</#list>



junly 2009-11-02 17:41 发表评论
]]>
freemarker 截取指定长度http://www.tkk7.com/ywj-316/archive/2009/10/29/300169.htmljunlyjunlyThu, 29 Oct 2009 05:24:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/10/29/300169.htmlhttp://www.tkk7.com/ywj-316/comments/300169.htmlhttp://www.tkk7.com/ywj-316/archive/2009/10/29/300169.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/300169.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/300169.html ${post.title}
<#else>
     ${post.title[0..21]}...
</#if>
注:(x)${post.title[0..21]}取得标题的前22个字W,后面加上省略?..Q自定义的)(j)

junly 2009-10-29 13:24 发表评论
]]>
freemarkW记http://www.tkk7.com/ywj-316/archive/2009/10/29/300168.htmljunlyjunlyThu, 29 Oct 2009 05:23:00 GMThttp://www.tkk7.com/ywj-316/archive/2009/10/29/300168.htmlhttp://www.tkk7.com/ywj-316/comments/300168.htmlhttp://www.tkk7.com/ywj-316/archive/2009/10/29/300168.html#Feedback0http://www.tkk7.com/ywj-316/comments/commentRss/300168.htmlhttp://www.tkk7.com/ywj-316/services/trackbacks/300168.htmlFreeMarker的指令的文gq为模板(TemplateQ?

模板设计者不兛_(j)数据从那儿来Q只知道使用已经建立的数据模型?

数据模型q序员~程来创建,向模板提供变化的信息Q这些信息来自于数据库、文Ӟ甚至于在E序中直接生成?

数据cdQ?

一、基本:(x)

1、scalarsQ存储单?

字符Ԍ(x)单文本由单或双引hh?

数字Q直接用数倹{?

日期Q通常从数据模型获?

布尔|(x)true或falseQ通常?lt;#if …>标记中?

2、hashesQ充当其它对象的容器Q每个都兌一个唯一的查询名?

h一个唯一的查询名字和他包含的每个变量相关联?

3、sequencesQ充当其它对象的容器Q按ơ序讉K

使用数字和他包含的每个变量相兌。烦(ch)引g0开始?

4、集合变量:(x)

除了(jin)无法讉K它的大小和不能用烦(ch)引来获得它的子变量:(x)集合可以看作只能?lt;#list...>指o(h)使用的受限sequences?

5、方法:(x)通过传递的参数q行计算Q以新对象返回结?

Ҏ(gu)变量通常是基于给出的参数计算值在数据模型中定义?

6、用戯定义FTL指o(h)Q宏和变换器

7、节?

节点变量表示为树(wi)型结构中的一个节点,通常在XML处理中用?

模板Q?

使用FTLQfreeMarker模板语言Q编?

l成部分

一、整体结?

1、注释:(x)<#--注释内容-->Q不?x)输出?

2、文本:(x)直接输出?

3、interpolation:?${var} ?#{var} 限定Q由计算g替输出?

4、FTL标记

二、指令:(x)

freemarker指o(h)有两U:(x)

1、预定义指o(h)Q引用方式ؓ(f)<#指o(h)名称>

2、用户定义指令:(x)引用方式?lt;@指o(h)名称>Q?span style="background-color: #00ff00">引用用户定义指o(h)旉?换ؓ(f)@?/span>

注意Q如果用不存在的指令,FreeMarker不会(x)使用模板输出Q而是产生一个错误消息?

freemarker指o(h)由FTL标记来引用,FTL标记和HTML标记cMQ名字前?来加以区分。如HTML标记的Ş式ؓ(f)<h1></h1>则FTL标记的Ş式是<#list></#list>Q此处h1标记和list指o(h)没有M功能上的对应关系Q只是做明用一下)(j)?

有三UFTL标记Q?

1)、开始标讎ͼ(x)<#指o(h)名称>

2)、结束标讎ͼ(x)</#指o(h)名称>

3)、空标记Q?lt;#指o(h)名称/>

注意Q?

1) FTL?x)忽略标C中的I格Q但是,<#和指??</#和指?之间不能有空根{?

2) FTL标记不能够交叉,必须合理嵌套。每个开始标记对应一个结束标讎ͼ层层嵌套?如:(x)

<#list>

<li>

${数据}

<#if 变量>

<p>game over!</p>

</#if>

</li>

</#list>

注意事项Q?

1)?span style="background-color: #00ff00">FTL对大写敏感?/span>所以用的标记?qing)interpolation要注意大写。name与NAME是不同的对象?lt;#list>是正的标记Q?lt;#List>则不是?

2)、interpolation只能在文本部分用,不能位于FTL标记内。如<#if ${var}>是错误的Q正的Ҏ(gu)是:(x)<#if var>,而且此处var必须为布?yu)(dng)倹{?

3)、FTL标记不能位于另一个FTL标记内部Q注释例外。注释可以位于标记及(qing)interpolation内部?

三、表辑ּ

1、直接指定|(x)

1-1、字W串Q?

由双引号或单引号括v来的字符Ԍ其中的特D字W(? " \{)(j)需要{义?

1-2?span style="background-color: #00ff00">raw字符Ԍ(x)

有一U特D的字符串称为raw字符Ԍ被认为是U文本,其中的\和{{不hҎ(gu)含义Q该cdW串在引号前面加rQ下面是一个例子:(x)

${r"/${data}"year""}屏幕输出l果为:(x)/${data}"year"

转义    含义

序列  

\"  双引?u0022)

\'  单引?u0027)

\\  反斜?u005C)

\n  换行(u000A)

\r  Return (u000D)

\t  Tab (u0009)

\b  Backspace (u0008)

\f  Form feed (u000C)

\l  <

\g  >

\a  &

\{  {

\xCode  4?6q制Unicode代码

1-3、数字:(x)直接输入Q不需要引?

1)、精度数字?#8220;.”分隔Q不能用分l符?

2)、目前版本不支持U学计数法,所?#8220;1E3”是错误的

3)、不能省略小数点前面?Q所?#8220;.5”是错误的

4)、数??8?8?.00都是相同?

1-4、布?yu)(dng)|(x)true和falseQ不使用引号

1-5?span style="background-color: #00ff00">序列Q由逗号分隔的子变量列表Q由[]Ҏ(gu)号限定?/span>

1)、子变量列表可以是表辑ּ

2)、可以用数字范围定义数字序列,<b>不需要方括号限定</b>Q例?..5{同于[2, 3, 4, 5]Q但是更有效率,可以定义反递增范围如:(x)5..2?

1-6?span style="background-color: #00ff00">散列(hash)

1)?span style="background-color: #00ff00">由逗号分隔的键/值列表,由{}大括号限定,键和g间用冒号分隔Q如Q{"key1":valu1,"key2":"character string"....}

2)?span style="background-color: #00ff00">键和值都是表辑ּQ但是键必须是字W串?/span>

2、获取变量:(x)

2-1、顶层变量:(x)${变量名}

变量名只能是字母、数字、下划线??、@ 的组合,且不能以数字开头?

2-2?span style="background-color: #00ff00">散列Q有两种Ҏ(gu)

1)?span style="background-color: #00ff00">点语法:(x)变量名字和顶层变量的名字受同L(fng)限制

2)?span style="background-color: #00ff00">Ҏ(gu)可法:(x)变量名字无限Ӟ可以是Q意的表达式的l果

book.author.name      散列表的多Q{"book":{"author":{"name":"张三"},"price":{"price1":200,"price2":500}},"book":{"author":{"name":"张三"}}

book.author.["name"]

book["author"].name

book["author"]["name"]

以上是等L(fng)?

2-3、序列:(x)使用散列的方括号语法获取变量Q方括号中的表达式结果必Mؓ(f)数字。注意:(x)W一个项目的索引?。可以?

[startindex..endindex]语法获取序列片段?

2-4、特D变量:(x)FreeMarker内定义变量,使用.variablename语法讉K?

3、字W串操作

3-1、interpolation:使用${}?{}在文本部分插入表辑ּ的|例如Q?

${"hello${username}!"}

${"${username}${username}${username}"}

也可以?来获得同L(fng)l果Q?

${"hello"+username+"!"}

${username+username+username}

注意Q?{}只能用于文本部分而不能出C标记内?

<#if ${user.login}>?lt;#if "${user.login}">都是错误?

<#if user.login>是正的?

本例中user.login的值必L布尔cd?

3-2、子Ԍ(x)

举例说明Q假如user的gؓ(f)"Big Joe"

${user[0]}${user[4]}l果是:(x)BJ

${user[1..4]}l果是:(x)ig J

4、序列操?

4-1、连接操作:(x)可以使用+来操作,例如Q?

["title","author"]+["month","day"]

5、散列操?

5-1、连接操作:(x)可以使用+来操作,如果有相同的KEYQ则双的g(x)替代左边的|例如Q?

{"title":散列,"author":"emma"}+{"month":5,"day":5}+{"month":6}l果month的值就??

6、算术运?

6-1、操作符Q?????

?号以外的其他操作W两边的数据Q必都是数字类型?

如果+h作符一Ҏ(gu)一个字W型数据Q会(x)自动另一边的数据转换为字W型数据Q运结果ؓ(f)字符型数据?

6-2、比较操作符Q?

1)?

2)?=

3)?=

4)?lt;

5)?lt;=

6)?gt;

7)?gt;=

1-3的操作符Q两边的数据cd必须相同Q否则会(x)产生错误

4-7的操作符Q对于日期和数字可以使用Q字W串不可以用?

注意Q?

1)?span style="background-color: #00ff00">FreeMarker是精比较,所?x" "x " "X"是不{的?

2)、因?lt;?gt;对FTL来说是开始和l束标记Q所以,可以用两U方法来避免q种情况Q?

一U是使用括号<#if (a<b)>

另一是用替代输出,对应如下Q?

<  lt

<= lte

>  gt

>= gte

6-3、逻辑操作W:(x)只能用于布尔|否则?x)出现错误?

&&(and)与运?

||(or)或运?

!(not)非运?

6-4、内建函?/span>Q用方法类g讉K散列的子变量Q只是?代替.例如Q?{test?upper_case?html}

常用的内建函数列丑֦下:(x)

1)、字W串使用Q?

html:对字W串q行HTML~码

cap_first:字符串第一个字母大?

lower_first:字符串第一个字母小?

upper_case:字W串转换成大?

trim:d字符前后的空白字W?/span>

2)、序列用:(x)

size:获得序列中元素的数目

3)、数字用:(x)

int:取得数字的整数部?/span>

7、操作符的优先顺序:(x)

后缀Q[subbarName][subStringRange].(mathodParams)

一元:(x)+expr?expr? (not)

内徏Q?

乘法Q???

加法Q??

关系Q?lt;?lt;=?gt;?gt;= (lt、lte、gt、gte)

相等Q??=?=

逻辑与:(x)&& (and)

逻辑或:(x)|| (or)

数字范围Q?.

四、interpolation

inperpolation只能用于文本Q有两种cdQ通用interpolation?qing)数字interpolation

1、通用interpolation

?{expr}

1-1、插入字W串|(x)直接输出表达式结果?

1-2、插入数字|(x)Ҏ(gu)~省格式(由setting指o(h)讄)表辑ּl果转换成文本输?可以使用内徏函数string来格式化单个interpolation

如:(x)

<#setting number_format="currency" />

<#assign answer=42 />

${answer}  <#-- K?2.00 -->

${answer?string}  <#-- K?2.00 -->

${answer?string.number}  <#-- 42 -->

${answer?string.currency}  <#-- K?2.00 -->

${answer?string.percent}  <#-- 42,00Q?-->

1-3、插入日期|(x)Ҏ(gu)~省格式(由setting指o(h)讄)表辑ּl果转换成文本输?可以使用内徏函数string来格式化单个interpolation

如:(x)

${lastupdata?string("yyyy-MM-dd HH:mm:ss zzzz")}  <#-- 2003-04-08 21:24:44 Pacific Daylight Time -->

${lastupdata?string("EEE,MMM d, ''yy")}  <#-- tue,Apr 8, '03 -->

${lastupdata?string("EEEE,MMMM dd, yyyy,hh:mm:ss a '('zzz')'")}  <#-- Tuesday,April 08, 2003, 09:24:44 PM (PDT)-->

1-4、插入布?yu)(dng)|(x)Ҏ(gu)~省格式(由setting指o(h)讄)表辑ּl果转换成文本输?可以使用内徏函数string来格式化单个interpolation

如:(x)

<#assign foo=ture />

${foo?string("yes","no")} <#-- yes -->

2、数字interpolation:

有两UŞ式:(x)

1)?{expr}

2)?{expr;format}Qformat可以用来格式化数字,format可以是如下:(x)

mX:数部分最X?

MX:数部分最大X?

例如Q?

<#assign x=2.582 />

<#assign y=4 />

#{x;M2} <#-- 2.58 -->

#{y;M2} <#-- 4 -->

#{x;m1} <#-- 2.582 -->

#{y;m1} <#-- 4.0 -->

#{x;m1M2} <#-- 2.58 -->

#{y;m1M2} <#-- 4.0 -->

杂项

一?span style="background-color: #00ff00">用户定义指o(h)

?/span>?span style="background-color: #00ff00">变换器变?/span>是两U不同类型的用户自定义指令,他们的区别是Q?

宏可以在模板中用macro指o(h)来定?

变换器是在模板外q序定?

1、宏Q和某个变量兌的模板片D,以便在模板中通过用户自定义指令用该变量

1-1、基本用法:(x)

例如Q?

<#macro greet>

<font size="+2"> Hello JOE!</font>

</#macro>

使用Ӟ(x)

<@greet></@greet>

如果没有体内容也可以?

<@greet />

1-2、变量:(x)

1)、可以在宏定义之后定义参敎ͼ宏参数是局部变量,只在宏定义中有效。如Q?

<#macro greet person>

<font size="+2"> Hello ${person}!</font>

</#macro>

使用Ӟ(x)

<@greet person="emma"> and <@greet person="LEO">

输出为:(x)

<font size="+2"> Hello emma!</font>

<font size="+2"> Hello LEO!</font>

注意Q宏的参数是FTL表达式,所以,person=emma和上面的例子中具有不同的意义Q这意味着变量emma的glperson,q个值可能是L一U数据类型,甚至是一个复杂的表达式?

宏可以有多个参数Q用时参数的次序是无关的,但是只能使用宏中定义的参敎ͼq且Ҏ(gu)有参数赋倹{如Q?

<#macro greet person color>

<font size="+2" color="${color}"> Hello ${person}!</font>

</#macro>

使用Ӟ(x)

<@greet color="black" person="emma" />正确

<@greet person="emma" />错误Qcolor没有赋|此时Q如果在定义宏时为color定义~省?lt;#macro greet person color="black">q样的话Q这个用方法就是正的?

<@greet color="black" person="emma" bgcolor="yellow" />错误Q宏greet定义中未指定bgcolorq个参数

2、嵌套内容:(x)

2-1、自定义指o(h)可以有嵌套内容,使用<#nested>指o(h)Q执行自定义指o(h)开始和l束标记之间的模板片Dc(din)例如:(x)

<#macro greet>

<p>

<#nested>

</p>

</#macro>

<@greet>hello Emma!</@greet>

输出?

<p>hello Emma!</p>

2-2?lt;#nested>指o(h)可以被多ơ调用,例如

<#macro greet>

<p>

<#nested>

<#nested>

<#nested>

<#nested>

</p>

</#macro>

<@greet>hello Emma!</@greet>

输出?

<p>

hello Emma!

hello Emma!

hello Emma!

hello Emma!

</p>

2-3、嵌套的内容可以是有效的FTLQ例如:(x)

<#macro welcome>

<p>

<#nested>

</p>

</#macro>

<#macro greet person color="black">

<font size="+2" color="${color}"> Hello ${person}!</font>

</#macro>

<@welcome>

<@greet person="Emma" color="red" />

<@greet person="Andrew" />

<@greet person="Peter" />

</@welcome>

输出为:(x)

<p>

<font size="+2" color="red"> Hello Emma!</font>

<font size="+2" color="black"> Hello Andrew!</font>

<font size="+2" color="black"> Hello Peter!</font>

</p>

2-4、宏定义中的局部变量对嵌套内容是不可见的,例如Q?

<#macro repeat count>

<#local y="test" />

<#list 1..count as x>

${y}${count}/${x}:<#nested />

</#list>

</#macro>

<@repeat count=3>

${y?default("?")}

${x?default("?")}

${count?default("?")}

</@repeat>

输出l果?

test 3/1:???

test 3/2:???

test 3/3:???

2-5、在宏定义中使用循环变量Q通常用来重复嵌套内容Q基本用法ؓ(f)Q作为nested指o(h)的参敎ͼ传递@环变量的实际|而在调用自定义指令时Q在标记的参数后面指定@环变量的名字?

例如Q?

<#macro repeat count>

<#list 1..count as x>

<#nested x,x/2,x==count />

</#list>

</#macro>

<@repeat count=4;c,halfc,last>

${c}. ${halfc}

<#if last>

last!

</#if>

</@repeat>

输出l果?

1. 0.5

2. 1

3. 1.5

4. 2last!

注意Q指定@环变量的数目和用户定义指令开始标记指定的不同不会(x)有问?

调用Ӟ指定@环变量,多指定的g(x)不见

调用Ӟ多指定@环变量,多余的@环变量不?x)被创?

二、在模板中定义变?

1、在模板中定义的变量有三U类?

1-1、plain变量Q可以在模板的Q何地方访问,包括使用include指o(h)插入的模板,使用assign指o(h)创徏和替换?

1-2、局部变量:(x)在宏定义体中有效Q用local指o(h)创徏和替换?

1-3、@环变量:(x)只能存在于指令的嵌套内容Q由指o(h)(如list)自动创徏?

注意Q?

1)、宏的参数是局部变量,不是循环变量?

2)、局部变量隐藏同名的plain变量

3)、@环变量隐藏同名的plain变量和局部变量?

例如Q?

<#assign x="plain">

1. ${x} <#-- plain -->

<@test />

6. ${x}

<#list ["loop"] as x>

7. ${x} <#-- loop -->

<#assign x="plain2">

8. ${x} <#-- loop -->

</#list>

9. ${x} <#-- plain2 -->

<#macro test>

2. ${x} <#-- plain -->

<#local x="local">

3. ${x} <#-- local -->

<#list ["loop"] as x>

4. ${x} <#-- loop -->

</#list>

5. ${x} <#-- local -->

</#macro>

4)、内部@环变量隐藏同名的外部循环变量

<#list ["loop1"] as x>

${x} <#-- loop1 -->

<#list ["loop2"] as x>

${x} <#-- loop2 -->

<#list ["loop3"] as x>

${x} <#-- loop3 -->

</#list>

${x} <#-- loop2 -->

</#list>

${x} <#-- loop1 -->

</#list>

5)、模板中的变量会(x)隐藏数据模型中的同名变量Q如果需讉K数据模型中的变量Q用特D变量global?

例如Q?

假设数据模型中的usergؓ(f)Emma

<#assign user="Man">

${user} <#-- Man -->

${.global.user} <#-- Emma -->



junly 2009-10-29 13:23 发表评论
]]>
վ֩ģ壺 aëƬ˾þ| jizzѲ| ޸߾Ʒ| ҹӰ| һһëƬѲ| һ| vaƷѹۿ| Ƶ| ۺϹһ| þþƷһԡ | ĻƵ| ѹۿվ| ˳վɫ| þ޾Ʒ| һƵ | ڵĤѿ| Ʒmnbavվ| þþƷž޾Ʒ| Ʒavһ| aëƬȫѲ| 91ƷӾʢ| ۺС˵| ɫһ| Ůֻwwwվ| þùƷѿ| ƷƵ| һ߹ۿ| 91ۺ| 9ֻоƷ| ҳվѹۿ| ޾Ʒ| һ| crmϵͳz| ˻ƶվƵ | ŷݵһղsuv| վ߹ۿ| ȫվ| ۺͼƬС˵| һ˿wwwƵ| Ƭ߹ۿѴȫ| һĻ|