<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    迷失北京

    BlogJava 聯系 聚合 管理
      60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

    根據網上自己做了測試和一點修改,測試代碼還有測試的截圖在最下面的部分貼出來了,方便大家參考和學習!不過文章中的關于測試的代碼沒有作修改,可以直接參考我的!!今天下載了一份freemarker的文檔,才發現昨天參考的那篇資料恰恰就是文檔,呼呼....啥也不說了!仔細的看了一遍文檔,又做了一些實驗,代碼補充到上來!!

    常用語法
    一個對象User(就是javabean對象)
    1.輸出 ${User.name}

    空值判斷:${User.name?if_exists },

    ${User.name?default(‘xxx’)}//默認值xxx
    ${ User.name!"xxx"}//默認值xxx

    日期格式:${User.date?string('yyyy-MM-dd')}

    數字格式:${User?string.number}--20
    ${User?string.currency}--<#-- $20.00 -->
    ${User?string.percent}—<#-- 20% -->

    插入布爾值:
    <#assign foo=ture />

    2.邏輯判斷
    a:
    <#if condition>...
    <#elseif condition2>...
    <#elseif condition3>......
    <#else>...
    其中空值判斷可以寫成<#if User.name?? >
    </#if>


    b:
    <#switch value>
    <#case refValue1>
        ...
        <#break>
    <#case refValue2>
        ...
        <#break>
    ...
    <#case refValueN>
        ...
        <#break>
    <#default>
        ...
    </#switch>

    3.循環讀取
    <#list sequence as item>
    ...
    </#list>
    空值判斷<#if UserList?size = 0></#list>


    e.g.
    <#list employees as e>
    ${e_index}. ${e.name}
    </#list>
    輸出:
    1. Readonly
    2. Robbin

    4.FreeMarker


    /模板

    Macro:宏是在模板中使用macro指令定義

    l.1 基本用法
    宏是和某個變量關聯的模板片斷,以便在模板中通過用戶定義指令使用該變量,下面是一個例子:

    <#macro greet>
    <font size="+2">Hello Joe!</font>
    </#macro>

    調用宏時,與使用FreeMarker的其他指令類似,
    只是使用@替代FTL標記中的#

    <@greet></@greet>

    <#--<@greet/>-->


    macro指令中可以在宏變量之后定義參數,如:

    <#macro greet person>
    <font size="+2">Hello ${person}!</font>
    </#macro>
    可以這樣使用這個宏變量:
       <@greet person="Fred"/>
    但是下面的代碼具有不同的意思:
       <@greet person=Fred/>
    這意味著將Fred變量的值傳給person參數,該值不僅是字符串,還可以是其它類型,甚至是復雜的表達式。


    宏可以有多參數,下面是一個例子:
    <#macro greet person color>
    <font size="+2" color="${color}">Hello ${person}!</font>
    </#macro>

    可以這樣使用該宏變量,其中參數的次序是無關的:
    <@greet person="Fred" color="black"/>

    可以在定義參數時指定缺省值,否則,在調用宏的時候,必須對所有參數賦值:
    <#macro greet person color="black">
    <font size="+2" color="${color}">Hello ${person}!</font>
    </#macro>

    注意:宏的參數是局部變量,只能在宏定義中有效。


    在宏里嵌套內容
    FreeMarker的宏可以有嵌套內容,
    <#nested>指令會執行宏調用指令開始和結束標記之間的模板片斷,舉一個簡單的例子:

    <#macro border>
    <table border=4 cellspacing=0 cellpadding=4><tr><td>
        <#nested>
    </tr></td></table>
    </#macro>

    執行宏調用:
    <@border>The bordered text</@border>
    輸出結果:
    <table border=4 cellspacing=0 cellpadding=4>
    <tr><td>
           The bordered text
    </tr></td>
    </table>

    <#nested>指令可以被多次調用,每次都會執行相同的內容。
    <#macro do_thrice>
    <#nested>
    <#nested>
    <#nested>
    </#macro>


    <@do_thrice>
    Anything.
    </@do_thrice>

    FMPP 輸出結果:
    Anything.
    Anything.
    Anything.


    嵌套內容可以是有效的FTL,下面是一個有些復雜的例子,我們將上面三個宏組合起來:
    <@border>
    <ul>
    <@do_thrice>
        <li><@greet person="Joe"/>
    </@do_thrice>
    </ul>
    </@border>
    輸出結果:
    <table border=4 cellspacing=0 cellpadding=4><tr><td>
    <ul>
        <li><font size="+2">Hello Joe!</font>
        <li><font size="+2">Hello Joe!</font>
        <li><font size="+2">Hello Joe!</font>
    </ul>
    </tr></td></table>

    宏定義中的局部變量對嵌套內容是不可見的,例如:
    <#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>

    輸出結果:
    test 3/1: ? ? ?
    test 3/2: ? ? ?
    test 3/3: ? ? ?


    在宏定義中使用循環變量
    nestted指令也可以有循環變量(循環變量的含義見下節),調用宏的時候在宏指令的參數后面依次列出循環變量的名字,格式如下:

    <@ macro_name paramter list; loop variable list[,]>

    例如:
    <#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>

    這里count是宏的參數,c, halfc,last則為循環變量,輸出結果:
    1. 0.5
    2. 1
    3. 1.5
    4. 2 Last!
    循環變量和宏標記指定的不同不會有問題,如果調用時少指定了循環變量,那么多余的值不可見。調用時多指定了循環變量,多余的循環變量

    不會被創建:
    <@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>

    在模板中定義變量
    在模板中定義的變量有三種類型:
    plain變量:可以在模板的任何地方訪問,包括使用include指令插入的模板,使用assign指令創建和替換。
    局部變量:在宏定義體中有效,使用local指令創建和替換。
    循環變量:只能存在于指令的嵌套內容,由指令(如list)自動創建;宏的參數是局部變量,而不是循環變量
    局部變量隱藏(而不是覆蓋)同名的plain變量;循環變量隱藏同名的局部變量和plain變量,下面是一個例子:

    <#assign x = "plain">

    ${x} <#-- we see the plain var. here -->

    <@test/>
    6. ${x} <#-- the value of plain var. was not changed -->
    <#list ["loop"] as x>
    7. ${x} <#-- now the loop var. hides the plain var. -->
        <#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->
    8. ${x} <#-- it still hides the plain var. -->
    </#list>
    9. ${x} <#-- the new value of plain var. -->
    <#macro test>
    2. ${x} <#-- we still see the plain var. here -->
    <#local x = "local">
    3. ${x} <#-- now the local var. hides it -->
    <#list ["loop"] as x>
        4. ${x} <#-- now the loop var. hides the local var. -->
    </#list>
    5. ${x} <#-- now we see the local var. again -->
    </#macro>
    輸出結果:
    1. plain
    2. plain
    3. local
    4. loop
    5. local
    6. plain
    7. loop
    8. loop
    9. plain2
    內部循環變量隱藏同名的外部循環變量,如:
    <#list ["loop 1"] as x>
    ${x}
    <#list ["loop 2"] as x>
        ${x}
        <#list ["loop 3"] as x>
          ${x}
        </#list>
        ${x}
    </#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 -->
    名字空間
    通常情況,只使用一個名字空間,稱為主名字空間,但為了創建可重用的宏、變換器或其它變量的集合(通常稱庫),必須使用多名字空間,

    其目的是防止同名沖突
    創建庫
    下面是一個創建庫的例子(假設保存在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
    可以看到例子中使用的兩個同名變量并沒有沖突,因為它們位于不同的名字空間。還可以使用assign指令在導入的名字空間中創建或替代變量

    ,下面是一個例子:
    <#import "/lib/my_test.ftl" as my>
    ${my.mail}
    <#assign mail="jsmith@other.com" in my>
    ${my.mail}
    輸出結果:
    jsmith@acme.com
    jsmith@other.com
    數據模型中的變量任何地方都可見,也包括不同的名字空間,下面是修改的庫:
    <#macro copyright date>
    <p>Copyright (C) ${date} ${user}. All rights reserved.</p>
    </#macro>
    <#assign mail = "${user}@acme.com">
    假設數據模型中的user變量的值是Fred,則下面的代碼:
    <#import "/lib/my_test.ftl" as my>
    <@my.copyright date="1999-2002"/>
    ${my.mail}
    輸出結果:
    <p>Copyright (C) 1999-2002 Fred. All rights reserved.</p>Fred@acme.com

     

    我的測測實例和測試結果截圖:

    helllo.flt

    <html>
    	<head>
    		<title>hello!</title>
    	</head>
    	<body>
    		<div>list:
    			<#list user?sort_by("id") as u>
    				<h1>${u.id}----${u.name}-----${u.date?string('yy-MM-dd HH:mm:ss')}</h1>
    			</#list>
    		</div>
    		<div>
    			insert a boolean:
    			<#assign foo=true />
    			${foo?string}
    		</div>
    		
    		<div>
    			if,elseif, else
    			<#assign a=2 />
    			<#if a=1>
    				a value:1
    			<#elseif a=2>
    				a value:2
    			<#elseif a=3>
    				a value:3	
    			<#else>
    				a value is else
    			</#if>				
    		</div>
    		
    		<div>
    			case:
    			<#assign str="wangkang">
    			
    			<#switch str>
    				<#case "wangkang1">
    					${str}
    				<#break>
    				<#case "wangkang2">
    					${str}
    				<#break>
    				<#case "wangkang">
    					${str}
    				<#break>
    			</#switch>	
    		</div>
    		
    		<div>
    			1:common
    			<#macro greet1>
    				<font size="+2" color="red">Hello Kitty!</font>
    			</#macro>
    			<@greet1>macro:</@greet1><br />
    			
    			2:design a parameter
    			<#macro greet2 person>
    				<font size="+2" color="red">hello ${person}</font>
    			</#macro>
    			<@greet2 person="wangkang!"/><br />
    			
    			3:design two parameters
    			<#macro greet3 person color="blue">
    				<font size="+2" color="${color}">hello ${person}</font>
    			</#macro>
    			<@greet3 person="wangkang!" color="green"/><br />
    			
    			4:在宏里嵌套內容#nested指令.啥意思呢:好比是jsp的include指令!
    			<#macro border>
    				<table border=4 cellspacing=0 cellpadding=4>
    					<tr>
    						<td>
    				    	<#nested>
    						</td>
    					</tr>
    				</table>
    			</#macro>
    			<#--引用-->
    			<@border>The bordered text</@border>
    			
    			<#--循環引用-->
    			<#macro do_thrice>
    				<ul>
    					<li><#nested></li>
    					<li><#nested></li>
    					<li><#nested></li>
    				</ul>
    			</#macro>
    			<@do_thrice>
    				An cycle String
    			</@do_thrice>
    			
    			5: 將上面所有的宏聯合顯示
    			<#macro do_thrice>
    				<@border>
    					<ul>
    						<li><#nested></li>
    						<li><#nested></li>
    						<li><#nested></li>
    					</ul>
    				</@border>	
    			</#macro>
    			<@do_thrice>
    				Content
    			</@do_thrice>
    			
    			6:在宏中定義使用循環變量<br />
    			<#macro repeat count>
    				<#list 1..count as x>
    				    <#nested x, x/2, x==count>
    				    <#--${x?number}-->
    				</#list>
    			</#macro>
    				
    			<@repeat count=4 ; c, halfc, last>
    				${c}. ${halfc}<br />
    				<#if last> Last!</#if>
    			</@repeat>
    			<br />
    			<@repeat count=4 ; c, halfc, last>
    				${c}. ${halfc}<#if last> Last!</#if>
    			</@repeat>
    			<br />
    			<@repeat count=4 ; c, halfc>
    				${c}. ${halfc}
    			</@repeat>
    			<br />
    			<@repeat count=4>
    				Just repeat it...
    			</@repeat>
    			<br />
    		</div>
    		
    		6: freemarker中的變量作用范圍
    		<div>
    			1:<br />
    			<#assign x = "plain">
    			${x} <#-- we see the plain var. here -->			
    			<@test/>
    			6. ${x} <#-- the value of plain var. was not changed -->
    				<#list ["loop"] as x>
    			7. ${x} <#-- now the loop var. hides the plain var. -->
    			    <#assign x = "plain2"> <#-- replace the plain var, hiding does not mater here -->
    			8. ${x} <#-- it still hides the plain var. -->
    				</#list>
    			9. ${x} <#-- the new value of plain var. -->
    				<#macro test>
    			2. ${x} <#-- we still see the plain var. here -->
    				<#local x = "local">
    			3. ${x} <#-- now the local var. hides it -->
    				<#list ["loop"] as x>
    		    4. ${x} <#-- now the loop var. hides the local var. -->
    				</#list>
    			5. ${x} <#-- now we see the local var. again -->
    				</#macro>
    			<br />
    			2: 內部循環變量隱藏同名的外部循環變量
    			<#list ["loop 1"] as x>
    				${x}
    					<#list ["loop 2"] as x>
    					    ${x}
    					    <#list ["loop 3"] as x>
    					      ${x}
    					    </#list>
    					    ${x}
    					</#list>
    				${x}
    			</#list>
    			<br />
    			3:需要訪問數據模型中的同名變量,使用特殊變量global
    			<#assign num=1000>
    			剛剛定義的num:${num}<br>       
    			模型中的:${.globals.num} 
    		</div>
    		
    		8:名字空間
    		<div>
    			<#--
    			1: 
    			<#import "taglib.ftl" as my>
    			<#assign mail="fred@acme.com">
    			<@my.copyright date="1999-2002"/>
    			${my.mail}
    			${mail}
    			-->
    			<#--
    			2: 用assign指令在導入的名字空間中創建或替代變量
    			<#import "taglib.ftl" as my>
    			${my.mail}<br />
    			<#assign mail="fred@acme.com" in my>
    			${my.mail}
    			-->
    			3: 數據模型中的變量任何地方都可見,也包括不同的名字空間
    			<#import "taglib1.ftl" as my>
    			<@my.copyright date="1999-2002"/>
    		</div>
    		
    		<#-- ******************************我看手冊做的一些例子************************* -->
    		
    		<#-- 關于字符串的一些操作 -->
    		<div>
    			(1)<#--Interpolation向文本中插入表達式的值-->
    			<#assign user="Kitty" />
    			${"Hello ${user}"}<br />
    			${"${user}${user}${user}${user}"} <br /><br />
    			${"Hello" + user + "!!"}<br />
    			${user + "\n" +user}<br />
    			
    			(2)<#--list--->
    			${user[0]}${user[4]}<br />
    			${user[0..4]}<br />
    			
    			(3)<#--使用字符串的+-->
    			<#list ["aaa", "bbb"] + ["ccc", "ddd"] as u>
    				${u}
    			</#list><br />
    			
    			(4)<#--散列操作: 連接符號":"-->
    			<#assign ages={"lei":30, "hou":20}+{"ying":19, "hou": 10} />
    				---lei:${ages.lei}<br />
    				---hou:${ages.hou}<br />
    				---ying:${ages.ying}<br />
    		</div>
    		
    		<#-- 關于運算的操作  -->
    		<div>
    			<#assign x=5 />
    			(1)<#-- 使用內建的操作后的整數部分,去掉小數點以后的部分,直接取整 -->
    			5/2取整:${(x/2)?int} <br />
    			1.3取整:${1.3?int}<br />
    			1.9取整:${1.89?int}<br />
    			-1.3取整:${1.2?int}<br />
    			-1.9取整:${1.9?int}<br />
    			
    			(2)<#--freemarker的比較=,!=,>,>=,<,<=, 還有關于邏輯操作符:"&&", "||", "!" --><br />
    			(3)<#-- 關于字符串使用的:html對html進行編碼;cap_first字符串首字母大寫;lower_case字符串小寫;upper_case大寫;trim去掉首尾空格 -->
    				<#--序列使用的:size獲得序列中的元素個數-->
    				<#--數字是用的:int-->
    				<#assign names=["a<ht&ml>", "b", "c"] />
    				${names[0]?upper_case?html}
    			<br />	
    			(4)關于interpolation的詳細使用
    			<#setting number_format="currency"/>
    			<#assign ans=100/>
    			${ans}<br/>
    			${ans?string}<br/>
    			${ans?string.number}<br/>
    			${ans?string.currency}<br/>
    			${ans?string.percent}<br/>
    			<br>
    			(5)<#--關于時間的設置-->			
    			${dd?string("yy-MM-dd, HH:mm:ss")}
    			
    			<#assign a=true/>
    			${a?string("yes", "no")}
    			<br/>
    			(6)<#-- 關于數字的格式化(數字的Interpolation:#{exp; format}):mX:小數部分最小x位,MX:小數部分最大x位 -->
    			<#assign ax=2.5890 />
    			<#assign bx=10 />
    			#{ax; m2}<br/>
    			#{bx; M2}<br/>
    			#{ax; m2}<br/>
    			#{bx; M2}<br/>
    			<br/>
    			
    		</div>
    	</body>
    </html>
    

       

    taglib.flt

    <#macro copyright date>
    	<p>Copyright (C) ${date} Julia Smith. All rights reserved.
    	<br>Email: ${mail}</p>
    </#macro> 
    <#assign mail = "jsmith@acme.com">
    

      

    tablib1.flt

    <#macro copyright date>
    	<p>Copyright (C) ${date} Julia Smith. All rights reserved numbers:${num}.
    	<br>Email: ${mail}</p>
    </#macro> 
    <#assign mail = "jsmith@acme.com">
    

      

    測試結果:

    posted on 2011-04-15 22:07 王康 閱讀(419) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲中文无码a∨在线观看| 色婷婷六月亚洲婷婷丁香| 国产精品亚洲lv粉色| 久久久久免费看黄A片APP| 亚洲区视频在线观看| 歪歪漫画在线观看官网免费阅读| 亚洲国产成人手机在线电影bd | 亚洲第一页在线观看| 91免费国产在线观看| 99999久久久久久亚洲| 国产高清免费在线| 四虎影视久久久免费| 亚洲无线码在线一区观看| 日本一区二区免费看| 亚洲国产电影在线观看| 天天摸夜夜摸成人免费视频 | a毛片在线看片免费| 亚洲视频2020| 成年在线网站免费观看无广告| 亚洲精品欧美综合四区| 亚洲国产香蕉人人爽成AV片久久 | 二区久久国产乱子伦免费精品| 亚洲乱码国产乱码精品精| 一级毛片免费观看不卡视频| 亚洲人成人77777网站不卡 | 日本媚薬痉挛在线观看免费| 免费看一级高潮毛片| 亚洲国产美女精品久久久久∴| 日本三级2019在线观看免费| 日本特黄特色AAA大片免费| 日韩亚洲人成在线综合日本| 成视频年人黄网站免费视频| 激情吃奶吻胸免费视频xxxx| 亚洲AV无码专区国产乱码4SE| 日本最新免费网站| 未满十八私人高清免费影院| 亚洲自偷自偷精品| 免费人成在线观看播放国产| 久9久9精品免费观看| 黄色三级三级免费看| 亚洲精品美女视频|