第09章Web網(wǎng)頁模板技術(shù)_第1頁
第09章Web網(wǎng)頁模板技術(shù)_第2頁
第09章Web網(wǎng)頁模板技術(shù)_第3頁
第09章Web網(wǎng)頁模板技術(shù)_第4頁
第09章Web網(wǎng)頁模板技術(shù)_第5頁
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、第第9章章 Web網(wǎng)頁模板技術(shù)網(wǎng)頁模板技術(shù) 9.1 Web模板簡介 9.2 Velocity模板 9.3 FreeMarker模板 9.1 Web模板簡介模板簡介 模板技術(shù)提供了一種簡潔的方式來生成動(dòng)態(tài)的頁面,并將程序邏輯和視圖之間分離開來,從而使程序開發(fā)人員只專注于編寫底層代碼,頁面設(shè)計(jì)人員只專注于視圖方面的設(shè)計(jì),這種方式不僅提高了開發(fā)效率,還使得應(yīng)用程序在長時(shí)間運(yùn)行后依然具有很好的維護(hù)性。 模板語言在現(xiàn)代的軟件開發(fā)中占據(jù)著重要的地位,它的功能強(qiáng)大,而且學(xué)習(xí)起來又是非常簡單,即使不熟悉編程的人也能很快的掌握它。 模板語言可以生成動(dòng)態(tài)的頁面,簡化Web開發(fā),但是它不僅僅局限于此,還有許多地方都

2、可以應(yīng)用它,比如生成SQL、Email、XML或者程序源代碼,甚至作為其它系統(tǒng)的一個(gè)集成組件。Velocity和FreeMarker是目前流行的兩種模板語言,其中Velocity是Apache Jakarta的一個(gè)開源產(chǎn)品,同時(shí)它也是一個(gè)基于Java的模板引擎,可方便的對(duì)模板進(jìn)行解析和處理。FreeMarker是另一個(gè)優(yōu)秀的模板語言,它的功能也是非常強(qiáng)大,而且適合于MVC模式的Web應(yīng)用中。 返回9.2 Velocity模板模板 Velocity模板語言簡稱VTL,是一個(gè)基于Java的模板引擎。在一個(gè)應(yīng)用程序中,可以預(yù)先使用Velocity模板語言設(shè)計(jì)好模板,開發(fā)人員將頁面顯示的數(shù)據(jù)放入上下文

3、中,Velocity引擎將模板和上下文結(jié)合起來,然后就可生成動(dòng)態(tài)的網(wǎng)頁。使用Velocity具有以下幾個(gè)優(yōu)點(diǎn): vVelocity是Apache軟件組織提供的一項(xiàng)開源項(xiàng)目,可以免費(fèi)下載。vVelocity簡單,掌握Velocity是一件容易的事情。vVelocity模版中不包含任何Java代碼,它將HTML技術(shù)和復(fù)雜的業(yè)務(wù)邏輯劃分出來,能簡化Web開發(fā)。vVelocity不僅可以生成Web頁面,還可以從模板中生成SQL、PostScript和XML,功能強(qiáng)大。vVelocity支持模版的國際化編碼轉(zhuǎn)換。 返回9.2 Velocity模板模板 9.2.1 Velocity下載與安裝 9.2.3

4、Velocity的注釋 9.2.5 Velocity的指令 9.2.2 初識(shí)Velocity 9.2.4 Velocity的引用 9.2.6 Velocity的其它特性 9.2.7 在Web應(yīng)用程序中使用Velocity Velocity下載與安裝下載與安裝 Velocity的下載網(wǎng)站是“/”,在此網(wǎng)站上下載完Velocity以后將其解壓縮,會(huì)得到兩個(gè)jar文件:velocity-1.5.jar和velocity-dep-1.5.jar,其中velocity-1.5.jar包含了Velocity的核心類,但是它沒有Velocity必需的庫文件,

5、velocity-dep-1.5.jar不僅包含了構(gòu)建完整的Velocity庫文件,還有Velocity所有依賴的庫文件。將這兩個(gè)jar文件放入應(yīng)用程序的classpath下,就完成了Velocity的安裝。 返回初識(shí)初識(shí)Velocity(1) 下面通過一個(gè)簡單實(shí)例來初步認(rèn)識(shí)Velocity。(1)在ecplise中新建一個(gè)Java工程,在工程的根目錄下建立Velocity模板文件,Velocity的模板文件以.vm結(jié)尾,在這里建立的模板文件的名稱為hello.vm,具體代碼如下: hello,$name 其中,$name被稱為Velocity的變量引用,它的值由Java程序來提供。 (2)建

6、立給Velocity變量引用提供值的Java類,類名為“HelloVelocity.java”主要代碼如下: 初識(shí)初識(shí)Velocity(2) public class HelloVelocity public static void main(String args) try Velocity.init();/初始化Velocity引擎 catch (Exception e) e.printStackTrace();VelocityContext context = new VelocityContext(); /初始化Velocity上下文context.put(name, Velocity

7、);/把數(shù)據(jù)填入上下文StringWriter writer = new StringWriter();try /把模板和上下文結(jié)合起來Velocity.mergeTemplate(hello.vm, ISO-8859-1, context, writer); catch (Exception e) e.printStackTrace();System.out.println(writer.toString(); /控制臺(tái)上輸出 運(yùn)行類HelloVelocity,程序的運(yùn)行結(jié)果如圖所示: 返回Velocity的注釋的注釋 在Velocity模板中包括以下兩種注釋: v單行注釋:以#開頭。v多行

8、注釋:以#*開始,以*#結(jié)束。 例如:#這是單行注釋#* 這是多行注釋 這是多行注釋*# 返回Velocity的引用(的引用(1) Velocity引用的作用是為了在模板中顯示動(dòng)態(tài)的內(nèi)容。在Velocity中,引用分為變量引用、屬性引用和方法引用。 1變量引用 變量引用由$和VTL標(biāo)識(shí)符組成,VTL標(biāo)識(shí)符必須以字母開頭,其余字符可以是字母(az 、AZ)、數(shù)字(09)、連字符(-)或下劃線(_)。例如:$username$user-name$user_name$number1 變量引用有兩種賦值方式:一種是在Java程序中賦值:context.put(name, Velocity);另一種是使

9、用set指令賦值:#set($username=sunyang)hello,$username Velocity的引用(的引用(2) 2屬性引用 屬性引用是由$、點(diǎn)號(hào)(.)和VTL標(biāo)識(shí)符組成的,例如:$country.china$user.age 屬性引用也有兩種賦值方式:一種是使用Hashtable對(duì)象賦值;另一種是使用方法賦值。有如下模板文件: bookname: $book.booknamebookauthor: $book.bookauthor 使用Hashtable對(duì)象在程序中賦值: 使用方法賦值 ,創(chuàng)建Book類,有對(duì)應(yīng)屬性的get、set方法:Hashtable book=new

10、 Hashtable();book.put(bookname,JSP教材);book.put(bookauthor, sunyang);context.put(book, book); Book book=new Book();book.setBookname(JSP教程);book.setBookauthor(sunyang);context.put(book, book); Velocity的引用(的引用(3) 3方法引用 方法引用由$、VTL標(biāo)識(shí)符和方法體組成,下面是使用方法引用的例子: $book.getBookid()$book.setBookname(JSP教程) $book.ge

11、tBookid()這種形式和屬性引用中的方法賦值是一樣的,而“$book.setBookname(JSP教程)”這種形式則是給屬性bookname賦值。 返回Velocity的指令(的指令(1) 在Velocity中,引用用來輸出動(dòng)態(tài)內(nèi)容,指令則是用來控制頁面的外觀和內(nèi)容。1給引用賦值的set指令 set指令用于給變量引用或?qū)傩砸觅x值,語法格式如下: #set(name=value) vname參數(shù):該參數(shù)必須是變量引用或?qū)傩砸胿value參數(shù):該參數(shù)可以是變量可以是變量引用、屬性引用、 方法引用、字符串、數(shù)字、ArrayList或算術(shù)表達(dá)式。 參數(shù)說明:例如:#set( $monkey

12、= $bill) #變量引用 #set( $monkey.Blame = $whitehouse.Leak ) #屬性引用#set($monkey.Plan = $spindoctor.weave($web) #方法引用#set( $monkey.Friend = monica ) #字符串 #set( $monkey.Say = Not, $my, fault ) #ArrayList#set( $number = $foo + 1 ) #算術(shù)表達(dá)式加法 Velocity的指令(的指令(2) 當(dāng)value值為字符串時(shí),須用單引號(hào)或雙引號(hào)包圍起來。用單引號(hào)和雙引號(hào)之間有所不同,用雙引號(hào)的引用會(huì)

13、替換成相應(yīng)的值,而用單引號(hào)的引用則輸出原代碼。例如: #set( $directoryRoot = www )#set( $domain= )#set( $mydomain1 = $directoryRoot.$domain )#set( $mydomain2 = $directoryRoot.$domain)$mydomain1$mydomain2 程序的輸出結(jié)果如圖所示: Velocity的指令(的指令(3) 2進(jìn)行條件控制的if/elseif/else指令 if/elseif/else指令類似于Java語言中的ifelseifelse指令,可進(jìn)行條件控制,格式如下: #if(condit

14、ion) .#elseif(condition2) .#else .#end 例如:#set($type=sunyang)#if($type=sunyang) 金牌會(huì)員#elseif($type=common) 普通會(huì)員#else 游客#end Velocity的指令(的指令(4) 3進(jìn)行遍歷循環(huán)的foreach指令 foreach指令可用于進(jìn)行遍歷循環(huán),格式如下: #foreach(Loop).#end foreach指令可進(jìn)行循環(huán)的對(duì)象有Vector、Hashtale或Array,例如:#foreach($book in $booklist) $book#end Velocity的指令(的

15、指令(5) 4可包含文件的include指令 使用include指令可將一個(gè)本地文件導(dǎo)入到模板中指定的位置,可一次導(dǎo)入一個(gè)本地文件,也可一次導(dǎo)入多個(gè)本地文件,導(dǎo)入多個(gè)時(shí)文件之間用逗號(hào)分開,文件名可用引用變量代替。include指令的語法格式如下: #include(file) #包含一個(gè)文件#include(file1,file2,fileN)#包含多個(gè)文件 例如:#include(main.html)#include(top.html,$main,$footer) Velocity的指令(的指令(6) 5可包含文件的parse指令 使用parse指令可導(dǎo)入一個(gè)包含VTL的本地文件,和使用in

16、clude不同,使用parse指令導(dǎo)入的文件會(huì)被Velocity解析,而且它只能一次導(dǎo)入一個(gè)文件,該指令的語法格式如下: #parse (file) 例如:#parse (index.vm)#parse ($main) 說明:使用parse指令包含的文件必須放在TEMPLATE_ROOT目錄下。 Velocity的指令(的指令(7) 6停止執(zhí)行的stop指令 stop指令經(jīng)常被使用在調(diào)試過程中,它可停止模板引擎的執(zhí)行并返回,語法格式如下: #stop 7定義宏的macro指令 宏是一段可重復(fù)使用的VTL片段,它使用macro指令定義,語法格式如下: #macro (macroname para

17、m1 param2 . paramN) #end macroname是定義的宏的名字,param1到paramN是宏的參數(shù)。使用macroname宏的語法格式如下: # macroname(param1,param1 param2 . paramN) Velocity的指令(的指令(8) 例如,定義宏:#macro( tablerows $color $somelist )#foreach( $something in $somelist )$something#end#end #set($greatlakes=Superior,Michigan,Huron,Erie,Ontario#set(

18、 $color = blue ) #tablerows( $color $greatlakes ) 使用宏 返回Velocity的其它特性(的其它特性(1) 1數(shù)學(xué)運(yùn)算 Velocity的數(shù)學(xué)運(yùn)算功能是通過set指令來實(shí)現(xiàn)的。例如:#set( $number = $sum + 6.8 )#set( $number = $sum - 10 )#set( $number = $sum * 9 )#set( $number = $sum/13)#set( $number = $sum%2) 2范圍操作 n.m n與和m必須是整數(shù)。范圍操作通常與et指令和foreach指令一起使用,否則會(huì)被解析成普通

19、的字符串,例如: #set($sum=0.2)#foreach($number in $sum)$number#end$sum0.2 Velocity的其它特性(的其它特性(2) 3字符串連接 Velocity的字符串連接非常簡單,只需將需要連接的字符串放在一起就可以,例如: #set($firstname=George)#set($lastname=Bush)#set($name=$firstname$lastname )#連接后賦給一個(gè)引用變量he name is $firstname$lastnamehe name is $name 要將字符串與引用連接需要使用一種引用符:$。該引用符在

20、Velocity中稱為正式引用符,例如: #set($firstname=George)he name is $firstnameBush 返回在在Web應(yīng)用程序中使用應(yīng)用程序中使用Velocity(1) 在本示例中,將數(shù)據(jù)放入工具箱tools.xml中,然后由Velocity負(fù)責(zé)將工具箱中的數(shù)據(jù)“讀出”,在模板文件中進(jìn)行處理后將結(jié)果返回給用戶。(1)創(chuàng)建一個(gè)Web工程,并將Velocity模板中所涉及到的類包導(dǎo)入到該工程下,其中本工程所需的jar文件如圖所示: (2)創(chuàng)建名為“welcome.vm”的模板文件,該模板文件顯示網(wǎng)頁的登錄次數(shù),代碼如下: 在在Web應(yīng)用程序中使用應(yīng)用程序中使用V

21、elocity(2) 歡迎頁$hello.message$user,這是您第$times次登錄該網(wǎng)站。 (3)創(chuàng)建名稱為“Hello.java”類文件,該類用來給模板文件中的引用提供值,代碼如下: public class Hello private String message=你好,歡迎訪問三揚(yáng)科技的公司網(wǎng)站;public String getMessage() return message; public void setMessage(String message) this.message = message; 在在Web應(yīng)用程序中使用應(yīng)用程序中使用Velocity(3) (4)在W

22、EB-INF下新建一個(gè)XML文件,名稱為tools.xml,代碼如下: Jone (5)在web.xml中配置Servlet的實(shí)現(xiàn)類為VelocityViewServlet,VelocityViewServlet是Velocity工具集中的一個(gè)Servlet類,它提供了對(duì)請(qǐng)求對(duì)象和屬性、會(huì)話對(duì)象和屬性以及Servlet上下文和屬性的直接模板訪問。web.xml的關(guān)鍵代碼如下: 在在Web應(yīng)用程序中使用應(yīng)用程序中使用Velocity(4) velocityorg.apache.velocity.tools.view.VelocityViewServletvelocity*.vmwelcome.v

23、m 程序運(yùn)行結(jié)果如圖所示: 返回9.3 FreeMarker模板模板 FreeMarker是一個(gè)基于Java的模板引擎,它被用來設(shè)計(jì)生成Web靜態(tài)頁面,對(duì)采用MVC模式設(shè)計(jì)的應(yīng)用程序尤為適用。FreeMarker簡化了Web應(yīng)用的開發(fā),使Java代碼從Web頁面中分離出來,增強(qiáng)了系統(tǒng)的可維護(hù)性。FreeMarker同時(shí)是一個(gè)輕量級(jí)的組件,與容器無關(guān),它能夠生成各種文本如HTML、XML、RTF甚至于Java源代碼。此外,F(xiàn)reeMarker還具有以下的幾個(gè)優(yōu)點(diǎn): v強(qiáng)大的模板語言:囊括所有常有的指令,使用復(fù)雜的表達(dá)式以及宏等。v通用的數(shù)據(jù)模型:使用抽象(接口)方式表示對(duì)象。v智能的國際化和本地

24、化:多種不同語言的相同模板。v強(qiáng)大的XML 處理能力:可訪問XML對(duì)象模型。v友好的報(bào)錯(cuò)信息:報(bào)錯(cuò)信息準(zhǔn)確、詳細(xì)。返回9.3 FreeMarker模板模板 9.3.1 FreeMarker下載與安裝 9.3.3 FreeMarker的注釋 9.3.5 FreeMarker的Interpolation 9.3.2 初識(shí)FreeMarker 9.3.4 FreeMarker的指令 9.3.6 FreeMarker的表達(dá)式 9.3.7 在Web應(yīng)用程序中使用FreeMarker FreeMarker下載與安裝下載與安裝 FreeMarker的下載網(wǎng)站是“http:/www.FreeMarker.or

25、g/index.html”。可選擇下載FreeMarker的完整開發(fā)包,它里面包含了FreeMarker的示例應(yīng)用、幫助文檔、源代碼和所有類庫。開發(fā)一個(gè)基于FreeMarker的應(yīng)用程序所依賴的jar文件為freemarker.jar,因此,只需將freemarker.jar放入應(yīng)用程序的classpath下,就完成了FreeMarker的安裝。 返回初識(shí)初識(shí)FreeMarker (1) FreeMarker本身是使用純Java語言編寫的一個(gè)模板引擎,它采用MVC模式設(shè)計(jì),允許Java Servlet保持圖形設(shè)計(jì)同應(yīng)用程序邏輯的分離。FreeMarker的工作原理是模板+數(shù)據(jù)模型=輸出,以此將

26、數(shù)據(jù)模型中的數(shù)據(jù)合并到模板并將其輸出。下面通過一個(gè)簡單實(shí)例來初步認(rèn)識(shí)FreeMarker。 (1)在ecplise中新建一個(gè)Java工程,在工程的根目錄下新建一個(gè)文件夾freemarker,freemarker文件夾中創(chuàng)建FreeMarker的模板文件,F(xiàn)reeMarker的模板文件以.ftl結(jié)尾,名稱為hello.ftl,代碼如下: hello,$user (2)建立完模板文件后,創(chuàng)建給模板提供值的數(shù)據(jù)模型,創(chuàng)建數(shù)據(jù)模型的Java程序主要代碼如下: 初識(shí)初識(shí)FreeMarker (2)public class HelloFreeMarker public static void main(S

27、tring args) Configuration configuration = new Configuration();/初始化ConfigurationMap data = new HashMap();data.put(“user”, “FreeMarker”);/將數(shù)據(jù)放入Map中Template template = null;try template = configuration.getTemplate(“freemarker/hello.ftl”);/加載模板 catch (IOException e) e.printStackTrace();try c

28、ess(data, new OutputStreamWriter(System.out);/輸出數(shù)據(jù) catch (TemplateException e) e.printStackTrace() catch (IOException e) e.printStackTrace(); 運(yùn)行類HelloFreeMarker,程序的輸出結(jié)果如圖所示: 返回FreeMarker的注釋的注釋 FreeMarker的注釋以結(jié)束。例如: FreeMarker的注釋還可用在FreeMarker的指令和Interpolation內(nèi)部,例如: 歡迎你: $username !#list sequence as i

29、tem 返回FreeMarker的指令(的指令(1) 1進(jìn)行條件判斷的if/elseif/else指令 FreeMarker的if/elseif/else指令用來進(jìn)行對(duì)數(shù)據(jù)的分支控制,if指令可單獨(dú)使用。if/elseif/else指令的語法格式如下: . . . . 例如: 60) 老年40) 中年20) 青年 少年或兒童 FreeMarker的指令(的指令(2) 2進(jìn)行迭代的list、break指令 list指令用于迭代輸出集合元素中的值,break指令則用于終止循環(huán)。list、break指令的語法格式如下: . hash_or_seq可以是集合對(duì)象或者h(yuǎn)ash表,甚至還可以是一個(gè)返回值為

30、集合對(duì)象的表達(dá)式,item是被迭代輸出的集合元素。在list指令中有兩個(gè)隱含的特殊變量:vitem_index:該變量將返回元素在hash_or_seq里的索引值。vitem_has_next:該變量類型為boolean型,當(dāng)值為false時(shí)表明該元素是hash_or_seq里的最后一個(gè)元素。 FreeMarker的指令(的指令(3) 3進(jìn)行分支控制的switch、case、default、break指令. . . . switch、case、default、break指令類似于Java中的switch結(jié)構(gòu),可用來進(jìn)行分支控制,它的語法格式如下: switch指令中至少需要包含一個(gè)case指令

31、,例如: 春天 夏天 秋天冬天 FreeMarker的指令(的指令(4) 4可包含文件的include指令 include指令用于包含指定的文件,語法格式如下: filename指被包含的文件名,options可省略或者是下面兩個(gè)值: vencoding:包含頁面時(shí)所用的編碼格式。vparse:指定包含文件是否用FTL語法解析,默認(rèn)值是true。 例如: FreeMarker的指令(的指令(5) 5導(dǎo)入文件的import指令 import指令用于導(dǎo)入指定的模板文件,類似于Java中的import,它的語法格式如下: 例如: 6不處理內(nèi)容的noparse指令 noparse指令可指定FreeMa

32、rker不處理被指令包含的內(nèi)容,語法: 例如:60) $number FreeMarker的指令(的指令(6) 7可壓縮空白空間和空白的行compress指令 compress指令用于壓縮空白空間和空白的行。語法格式如下: 8添加與去除表達(dá)式的escape、noescape指令 escape指令用于使被escape指令包圍的Interpolatioin自動(dòng)加上escape表達(dá)式,而noescape指令則用于取消這些表達(dá)式。語法格式如下: . . . 書名:$bookname作者:$bookautor價(jià)格:$bookprice 書名:$bookname?html 作者:$bookautor價(jià)格:

33、$bookprice?html 等價(jià)FreeMarker的指令(的指令(7) 9定義或隱藏變量的assign指令 assign指令的作用是定義或隱藏變量,所謂隱藏變量是指assign定義的變量之前已經(jīng)存在,使用assign定義后之前變量的值會(huì)被當(dāng)前變量隱藏。assign指令的語法格式如下: assign指令還可一次定義多個(gè)變量,定義多個(gè)變量的語法格式如下: FreeMarker允許assign指令用in子句將定義的變量放入namespace(命名空間)中,語法如下: assign指令允許將一段輸出的文本賦值給定義的變量,語法格式如下: 循環(huán)部分輸出部分 assign指令還允許將變量的名稱定義為

34、中文。 FreeMarker的指令(的指令(8) 10定義全局變量的global指令 使用global指令定義的變量為全局變量,global指令的語法格式如下: 11設(shè)置運(yùn)行環(huán)境的setting指令 setting指令可用來設(shè)置系統(tǒng)的運(yùn)行環(huán)境,它的語法格式如下: 若global指令和assign指令一起使用,global指令定義的變量會(huì)被assign指令所隱藏。 name可以是以下幾個(gè)值: vlocale:設(shè)置模板所用的國家/語言選項(xiàng)。vnumber_format:設(shè)置格式化輸出數(shù)字的格式。 FreeMarker的指令(的指令(9) vboolean_format:設(shè)置兩個(gè)boolean值的語

35、法格式,默認(rèn)值是“true,false”。vdate_format, time_format, datetime_format:設(shè)置格式化輸出日期的格式。vurl_escaping_charset:設(shè)置URL傳遞參數(shù)的字符集編碼格式。vtime_zone:設(shè)置格式化輸出日期所使用的時(shí)區(qū)。 例如,使用setting指令格式數(shù)字: $number $number FreeMarker的指令(的指令(10) 宏是一個(gè)用戶自定義指令,定義完宏后就可以在模板中用來使用宏。在FreeMarker中,宏是使用macro指令來定義的,定義宏的語法格式如下: . . . 12可自定義指令的宏指令 name是定義

36、的宏的名字,paramN是宏的參數(shù),該參數(shù)可包含多個(gè)。nested指令用于輸出宏的開始和結(jié)束標(biāo)簽之間的部分,loopvarN是nested指令中的循環(huán)變量,這些變量由macro定義部分指定后傳給使用的模板。return指令用于結(jié)束宏。 返回FreeMarker的的Interpolation(1) 在FreeMarker中,Interpolation包括兩種:通用Interpolation和數(shù)字專用Interpolation 1通用Interpolation的語法如下: $expre 當(dāng)expre的值是字符串時(shí),會(huì)直接在模板中輸出表達(dá)式結(jié)果。 當(dāng)expre的值是數(shù)字時(shí),其輸出格式由setting

37、指令指定或通過內(nèi)建的字符串函數(shù)指定 。 當(dāng)expre的值是日期時(shí),其輸出格式由setting指令指定或通過內(nèi)建的字符串函數(shù)指定 。 當(dāng)expre值為boolean時(shí),不能直接輸出,可以使用內(nèi)建的字符串函數(shù)格式化后再輸出 。FreeMarker的的Interpolation(2) 2數(shù)字專用Interpolation 的語法如下: #expre 或 #expre;format 第2種語法格式可用來格式數(shù)字,其中的format使用mN或MN表示,mN代表小數(shù)部分最小N位,MN代表小數(shù)部分最大N位 。例如:#x;m2#x;M2#y;m1#y;M1#x;m1M3#y;m1M2 返回FreeMarker

38、的表達(dá)式的表達(dá)式 (1)1直接指定值 v字符串:字符串用單引號(hào)或雙引號(hào)限定,包含特殊字符的字符串 需要轉(zhuǎn)義。轉(zhuǎn)義序列如表所示。 轉(zhuǎn)義序列含義雙引號(hào)(u0022)單引號(hào)(u0027)反斜杠(u005C)n換行(u000A)rReturn (u000D)tTab (u0009)bBackspace (u0008)fForm feed (u000C)la&xCode4位16進(jìn)制Unicode代碼FreeMarker的表達(dá)式的表達(dá)式 (2)1直接指定值 v數(shù)字:數(shù)字可直接輸入,不需要引號(hào)。精度數(shù)字使用“. .”分割。 v集合:集合包括由逗號(hào)分割的子變量列表(如“男”,“女”)和 數(shù)字序列(如0.3,相

39、當(dāng)于0,1,2,3) v布爾值:布爾值包括true和false,不需要引號(hào)。 v散列(hash):散列是由逗號(hào)分隔的鍵/值列表,由大括號(hào)限定, 鍵和值之間用冒號(hào)分隔,如: username: sunyang , age:30。 FreeMarker的表達(dá)式的表達(dá)式 (3)2獲取變量 獲取變量的途徑如下: v從頂層變量中獲?。喉攲幼兞科鋵?shí)就是存放在數(shù)據(jù)模型中的值,在模板中使用$var直接輸出,變量名由字母、數(shù)字、下劃線、$、和#的組合而成,且不能以數(shù)字開頭。v從散列(hash)中獲?。簭纳⒘校╤ash)中獲取的變量,使用點(diǎn)號(hào)(“. .”)或方括號(hào)(“”)來輸出。v從集合中獲?。韩@取方式和散列中用

40、方括號(hào)獲取相同,但是要求方括號(hào)中的表達(dá)式值必須是數(shù)字。v特殊變量的獲?。簩?duì)于一些特殊的變量,比如FreeMarker的 提供的內(nèi)建變量等,使用. .variableName訪問。 FreeMarker的表達(dá)式的表達(dá)式 (4)3字符串操作 v連接字符串:使用$var(或#num)在文本部分插入表達(dá)式的值或者直接用加號(hào)來連接。v截取子串:截取子串是根據(jù)字符串的索引來完成的,如:$username3表示將索引值位置為3的字串截取掉。 4集合操作 集合的連接使用加號(hào)(+)連接。 5散列(hash)操作 散列(hash)的連接和集合一樣,也是使用加號(hào)(+)來連接的。 6算術(shù)運(yùn)算操作 算術(shù)運(yùn)算操作有+、-

41、、%。當(dāng)進(jìn)行加加法運(yùn)算時(shí),如果一邊是數(shù)字,另一邊是字符串,F(xiàn)reeMarker會(huì)自動(dòng)將數(shù)字轉(zhuǎn)換為字符串。 FreeMarker的表達(dá)式的表達(dá)式 (5)7比較運(yùn)算操作 ,規(guī)則如下: v使用=(或=)測試兩個(gè)值是否相等,使用!= 測試兩個(gè)值是否不相等,=和!=兩邊要求相同類型的值。vFreeMarker是精確比較,所以x、x 和X是不相等的。v對(duì)數(shù)字和日期比較可以使用、和=,但字符串不能。v由于FreeMarker會(huì)將解釋成FTL標(biāo)簽的結(jié)束字符,所以對(duì)于和=可以使用括號(hào)來避免這種情況,例如 y)。v可以使用lt、lte、gt和gte來替代、和=。 8邏輯運(yùn)算操作 邏輯運(yùn)算操作的運(yùn)算符有邏輯與(&)

42、、邏輯或(|)和邏輯非(!),邏輯運(yùn)算符只能作用于布爾值。 FreeMarker的表達(dá)式的表達(dá)式 (6)9內(nèi)建函數(shù) 內(nèi)建函數(shù)的用法類似訪問散列的子變量,只是使用“?”替代“.”,F(xiàn)reeMarker提供的內(nèi)建函數(shù)如下: v字符串函數(shù):字符串函數(shù)的名稱及其描述如表所示。函數(shù)名稱描述html對(duì)字符串進(jìn)行HTML編碼cap_first使字符串第一個(gè)字母大寫lower_case將字符串轉(zhuǎn)換成小寫upper_case將字符串轉(zhuǎn)換成大寫trim去掉字符串前后的空白字符v集合函數(shù):集合函數(shù)只有一個(gè):size,用于獲取集合中元素中的數(shù)目。v數(shù)字函數(shù):數(shù)字函數(shù)也只有一個(gè):int,用于獲取數(shù)字的整數(shù)部分。FreeMarker的表達(dá)式的表達(dá)式 (7)10空值處理 在FreeMarker 模板中,若變量未被賦值或者未定義,程序?qū)?huì)拋出異常,為了避免這種情況,F(xiàn)reeMarker提供了兩個(gè)運(yùn)算符: v?。褐付ㄗ兞康哪J(rèn)值,如:var!或var!defaultValue,當(dāng)使用 var!這種形式時(shí)表明默認(rèn)值是空字符串、size為零的集合 或size為零的散列(hash),當(dāng)使用var!defaultValue這種 形式時(shí),不要求defaultValue(默認(rèn)值)和變量類型相同。v?:使用?時(shí)返回值

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論