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

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

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

    隨筆-124  評(píng)論-49  文章-56  trackbacks-0
     
         摘要: 在我已往的Struts 1.x項(xiàng)目經(jīng)驗(yàn)中,有個(gè)問(wèn)題不時(shí)的出現(xiàn)——在創(chuàng)建FormBean時(shí),對(duì)于某個(gè)屬性到底應(yīng)該用String還是其它類型? 開(kāi)發(fā)Web應(yīng)用程序與開(kāi)發(fā)傳統(tǒng)桌面應(yīng)用程序不同,Web應(yīng)用程序?qū)嶋H上是分布個(gè)不同的主機(jī)(當(dāng)然也可以同一個(gè)主機(jī),不過(guò)比較少見(jiàn))上的兩個(gè)進(jìn)程之間互交。這種互交建立在HTTP之上,它們互相傳遞是都是字符串。換句話說(shuō), 服務(wù)器可以的接收到的來(lái)自用...  閱讀全文

    Max 2006-11-07 14:26 發(fā)表評(píng)論

    文章來(lái)源:http://www.tkk7.com/max/archive/2006/11/07/79602.html
    posted @ 2009-10-29 19:00 junly 閱讀(175) | 評(píng)論 (0)編輯 收藏
         摘要: Struts 2.0系列之四
    國(guó)際化是商業(yè)系統(tǒng)中不可或缺的一部分,所以無(wú)論您學(xué)習(xí)的是什么Web框架,它都是必須掌握的技能。  閱讀全文

    Max 2006-11-01 19:06 發(fā)表評(píng)論

    文章來(lái)源:http://www.tkk7.com/max/archive/2006/11/01/78536.html
    posted @ 2009-10-29 19:00 junly 閱讀(79) | 評(píng)論 (0)編輯 收藏
         摘要: 有Struts 1.x經(jīng)驗(yàn)的朋友都知道Action是Struts的核心內(nèi)容,當(dāng)然Struts 2.0也不例外。不過(guò),Struts 1.x與Struts 2.0的Action模型很大的區(qū)別。   Struts 1.x Stuts 2.0 ...  閱讀全文

    Max 2006-10-25 12:10 發(fā)表評(píng)論

    文章來(lái)源:http://www.tkk7.com/max/archive/2006/10/25/77157.html
    posted @ 2009-10-29 19:00 junly 閱讀(108) | 評(píng)論 (0)編輯 收藏
         摘要: 在上一篇文章《為Struts 2.0做好準(zhǔn)備》中,我過(guò)于詳細(xì)地介紹了Struts 2.0開(kāi)發(fā)環(huán)境和運(yùn)行環(huán)境的配置,所以,本文很少涉及的以上兩方面的細(xì)節(jié)。如果,您看完《為Struts 2.0做好準(zhǔn)備》后,還有什么不明白,或者沒(méi)法運(yùn)行文中例子,請(qǐng)聯(lián)系我。我的E-MAIL:Max.M.Yuan@gmail.com。 在介紹常用標(biāo)志前,我想先從總體上,對(duì)Struts 1.x與Struts 2.0的標(biāo)...  閱讀全文

    Max 2006-10-18 12:02 發(fā)表評(píng)論

    文章來(lái)源:http://www.tkk7.com/max/archive/2006/10/18/75857.html
    posted @ 2009-10-29 19:00 junly 閱讀(81) | 評(píng)論 (0)編輯 收藏
         摘要: Struts 2.0系列之一
    Struts 2.0的簡(jiǎn)單易用、方便測(cè)試相信也會(huì)給大家留下不錯(cuò)的印象吧。我相信,Struts 2.0作為一個(gè)全新的Web架構(gòu),將會(huì)再次掀起Web開(kāi)發(fā)的熱潮。  閱讀全文

    Max 2006-10-10 18:35 發(fā)表評(píng)論

    文章來(lái)源:http://www.tkk7.com/max/archive/2006/10/10/74353.html
    posted @ 2009-10-29 19:00 junly 閱讀(82) | 評(píng)論 (0)編輯 收藏

    明明已經(jīng)將某個(gè)web應(yīng)用從tomcat下的webapps下移除了,為什么還會(huì)拋這樣的異常呢?

     

    java.lang.IllegalArgumentException: Document base *** does not exist or is not a readable

    directory
    at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:141)
    at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:3957)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4126)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
    ********

    .................

    其實(shí)這個(gè)問(wèn)題很簡(jiǎn)單,tomcat的一個(gè)應(yīng)用不只是那個(gè)文件夾而已...

     

     

    詳細(xì)操作應(yīng)該是這樣的:

    1.該項(xiàng)目的War文件從***\apache-tomcat-6.0.16\webapps 移出;

    2.該項(xiàng)目的某些配置從 ***apache-tomcat-6.0.16\work\Catalina\localhost 移除;

    3.該項(xiàng)目的配置文件,目錄: ***\apache-tomcat-6.0.16\conf\Catalina\localhost移除。

    4.該項(xiàng)目的配置文件,目錄: ***\apache-tomcat-6.0.16\conf\server.xml中改修或添加的配置是否正確。

     

     

    posted @ 2009-10-29 17:10 junly 閱讀(4739) | 評(píng)論 (0)編輯 收藏

     /*
     由于javascript是一種無(wú)類型語(yǔ)言,所以一個(gè)數(shù)組的元素可以具有任意的數(shù)據(jù)類型,同一個(gè)數(shù)組的不同元素
     可以具有不同的類型,數(shù)組的元素設(shè)置可以包含其他數(shù)組,這樣就可以創(chuàng)建一個(gè)復(fù)雜的數(shù)組了.
     并且在這點(diǎn)上說(shuō)javascript作為一種腳本語(yǔ)言不同于那種嚴(yán)格的面向?qū)ο蟮腸++.c#,java了.具有更高的靈活性.
     */

     /*
     *在javascript1.1和其后的版本中,數(shù)組是用構(gòu)造函數(shù)Array()和運(yùn)算符new來(lái)創(chuàng)建,
     可用以下的三種方式來(lái)創(chuàng)建javascript 中的數(shù)組.
     */
     var a=new Array();
     var b=new Array(5,4,3,"first","test,string");
     var c=new Array(20);

     a[1.23]="test";
     document.write("a[1.23]="+a[1.23]);
     //相信每位從強(qiáng)類型的編程語(yǔ)言學(xué)習(xí)javascript時(shí),絕對(duì)會(huì)以為上面這種操作感到驚訝,
     //float數(shù)據(jù)也作數(shù)組的下標(biāo)了,事實(shí)上                       并非如您所想       
     //javascript在您是用負(fù)數(shù),浮點(diǎn)數(shù),(或布爾型,對(duì)象,其他值時(shí)),javascript會(huì)將它轉(zhuǎn)換為一個(gè)字符串
     //用生成的字符串作為對(duì)象的屬性名字,而不是定義了一個(gè)新的數(shù)組元素
     //上面的實(shí)例事實(shí)就是為a 創(chuàng)建了一個(gè)名為:"1.23"的屬性.
     document.write("a.length="+a.length);
     document.write("b.length="+b.length);
     document.write("c.length="+c.length);

     a[3]="Test";
     document.write("<br />a[3]="+a[3]);
     document.write("<br/>a.length="+a.length);
     //以上測(cè)試也很明確我們用整數(shù)作為數(shù)組的下標(biāo)是才會(huì)真正為數(shù)組添加一個(gè)元素,
     //這里用數(shù)組的長(zhǎng)度來(lái)體現(xiàn)了javascript的數(shù)組中的奧妙。


     //通過(guò)設(shè)置數(shù)組的length屬性能過(guò)截?cái)鄶?shù)組的長(zhǎng)度。
     a.length=3;
     if (a[3]==undefined)
     {
      document.write("<br />在a.length="+a.length+"后,a[3]="+a[3]);
     }
     else
     {
        document.write("<br />在a.length="+a.length+"后,a[3]="+a[3]);
     }

     //這里測(cè)試我們的多維數(shù)組元素
     /*
     *javascript中實(shí)際上是不支持多維數(shù)組
     *但是我們將一個(gè)一維數(shù)組的元素再賦給其一個(gè)一維數(shù)組,這樣就看起來(lái)就實(shí)現(xiàn)了多維數(shù)組了,但
     實(shí)際上他還是個(gè)一維數(shù)組,這和我們理解c語(yǔ)言的數(shù)組時(shí)的那種想法一樣,但他們的實(shí)現(xiàn)機(jī)制是不一樣的。
     */
     var g=new Array(3);
     g[3]=a;
     g[3][2]="Test"
     document.write("<br />g[3][2]="+g[3][2]);
     
      //數(shù)組join()方法
      for (var i=0;i<20 ;i++ )
      {
     c[i]=i;
     document.write("<br />c[i]="+c[i]);
      }
      document.write("<br/>c的元素join()方法后是:"+c.join());
      //數(shù)組的reverse()方法
      c.reverse();
      document.write("<br />c的元素在reverse()方法再join()后的結(jié)果是:"+c.join("|"));

      //concat()方法的測(cè)試
      var h=new Array(1,2,3);
      h= h.concat([4,5]);
      //但是concat函數(shù)不會(huì)遞歸地展開(kāi)一個(gè)元素為數(shù)組的數(shù)組。
      h=h.concat(6,7,[9,[10,20]]);
      document.write("<br />h.length="+h.length+"<br />"+h);
      document.write("h[8]="+h[8]);


      //slice()方法
      document.write("<br>h.slice(4,5)="+h.slice(4,5));
    document.write("h.slice(5,9)="+h.slice(5,9))
    //slice()方法:返回的數(shù)組包含有第一個(gè)參數(shù)指定的元素和那個(gè)元素開(kāi)始到第二個(gè)參數(shù)指定的
    //元素為止的元素但不包含第二個(gè)參數(shù)所指定的元素。


    //splice()方法
    //splice()方法是插入或刪除數(shù)組元素通用的方法。
    /*
    splice函數(shù)第一個(gè)參數(shù)指定了要插入或刪除的元素在數(shù)組中的位置。
    第二個(gè)參數(shù)指定了要從數(shù)組中刪除的元個(gè)數(shù)
    在第二參數(shù)之后可以有任意多個(gè)參數(shù),它們指定的是從第一個(gè)參數(shù)指定的位置處插入的元素。
    第一個(gè)元素及后續(xù)元素,做出相應(yīng)的移動(dòng)。
    */

    document.write("<br />h.splice(8,1)后的h為::"+h.splice(8,1));
    //document.write("<br />h.splice(8,0,'a','b','Test')后的h為::"+h.splice(8,0,'a','b','Test'));
    h.splice(7,0,'a','b','Test');
    document.write("<br />h.splice(7,0,'a','b','Test')后的h為:"+h);


    //javascript中的數(shù)組作為堆棧時(shí)和php類似
    //這點(diǎn)有趣更有用。
    //以下是作為堆棧是使用的小實(shí)例
    /*
    push方法是將一個(gè)或多個(gè)新元素附加到數(shù)組的尾部,然后返回?cái)?shù)組的新長(zhǎng)度。
    pop將刪除數(shù)組的最后一個(gè)元素,堅(jiān)守?cái)?shù)組的長(zhǎng)度,返回他刪除的值。
    */
    var stack=new Array();
    stack.push(1,2);
    document.write("<br>stack的元素是:"+stack);
    document.write("<br />stack.length="+stack.length);
    document.write("<br>stack.pop()返回的結(jié)果是:"+stack.pop());
    document.write("<br />stack.length="+stack.length);

    //以下是作為隊(duì)列使用的小實(shí)例
    /*
    unshift方法將一個(gè)或多個(gè)元素添加到數(shù)組元素的頭部,然后把已有的元素移動(dòng)到下標(biāo)最大的位置已騰出空間
    ,它返回的是主族的新長(zhǎng)度。
    方法shift是刪除并返回?cái)?shù)組的第一個(gè)元素,然后將后面的所有元素都向前移動(dòng)以填補(bǔ)第一個(gè)元素留下的空白。
    */
    var list=[];
    list.unshift(6,2);
    document.write("<br >list的內(nèi)容為:"+list);
    document.write("<br>list的shift方法是:"+list.shift());

    //此外就剩下,我們?cè)趈ava中熟悉的toString()方法 了
    //It's a piece of cake!
    document.write(c.toString());
    //說(shuō)白了,其實(shí)數(shù)組的toString()方法和無(wú)參數(shù)的join()的效果是完全相同
    //OK,this's chapter for Array,that's all!

    </script>

    posted @ 2009-10-29 13:27 junly 閱讀(153) | 評(píng)論 (0)編輯 收藏
    <#if post.title?length lt 25 >  
    ${post.title}
    <#else>
         ${post.title[0..21]}...
    </#if>
    注:${post.title[0..21]}取得標(biāo)題的前22個(gè)字符,后面加上省略號(hào)...(自定義的)
    posted @ 2009-10-29 13:24 junly 閱讀(324) | 評(píng)論 (0)編輯 收藏

    FreeMarker的指令的文件就稱為模板(Template)。

    模板設(shè)計(jì)者不關(guān)心數(shù)據(jù)從那兒來(lái),只知道使用已經(jīng)建立的數(shù)據(jù)模型。

    數(shù)據(jù)模型由程序員編程來(lái)創(chuàng)建,向模板提供變化的信息,這些信息來(lái)自于數(shù)據(jù)庫(kù)、文件,甚至于在程序中直接生成。

    數(shù)據(jù)類型:

    一、基本:

    1、scalars:存儲(chǔ)單值

    字符串:簡(jiǎn)單文本由單或雙引號(hào)括起來(lái)。

    數(shù)字:直接使用數(shù)值。

    日期:通常從數(shù)據(jù)模型獲得

    布爾值:true或false,通常在<#if …>標(biāo)記中使用

    2、hashes:充當(dāng)其它對(duì)象的容器,每個(gè)都關(guān)聯(lián)一個(gè)唯一的查詢名字

    具有一個(gè)唯一的查詢名字和他包含的每個(gè)變量相關(guān)聯(lián)。

    3、sequences:充當(dāng)其它對(duì)象的容器,按次序訪問(wèn)

    使用數(shù)字和他包含的每個(gè)變量相關(guān)聯(lián)。索引值從0開(kāi)始。

    4、集合變量:

    除了無(wú)法訪問(wèn)它的大小和不能使用索引來(lái)獲得它的子變量:集合可以看作只能由<#list...>指令使用的受限sequences。

    5、方法:通過(guò)傳遞的參數(shù)進(jìn)行計(jì)算,以新對(duì)象返回結(jié)果

    方法變量通常是基于給出的參數(shù)計(jì)算值在數(shù)據(jù)模型中定義。

    6、用戶自定義FTL指令:宏和變換器

    7、節(jié)點(diǎn)

    節(jié)點(diǎn)變量表示為樹(shù)型結(jié)構(gòu)中的一個(gè)節(jié)點(diǎn),通常在XML處理中使用。

    模板:

    使用FTL(freeMarker模板語(yǔ)言)編寫(xiě)

    組成部分

    一、整體結(jié)構(gòu)

    1、注釋:<#--注釋內(nèi)容-->,不會(huì)輸出。

    2、文本:直接輸出。

    3、interpolation:由 ${var} 或 #{var} 限定,由計(jì)算值代替輸出。

    4、FTL標(biāo)記

    二、指令:

    freemarker指令有兩種:

    1、預(yù)定義指令:引用方式為<#指令名稱>

    2、用戶定義指令:引用方式為<@指令名稱>,引用用戶定義指令時(shí)須將#換為@。

    注意:如果使用不存在的指令,F(xiàn)reeMarker不會(huì)使用模板輸出,而是產(chǎn)生一個(gè)錯(cuò)誤消息。

    freemarker指令由FTL標(biāo)記來(lái)引用,F(xiàn)TL標(biāo)記和HTML標(biāo)記類似,名字前加#來(lái)加以區(qū)分。如HTML標(biāo)記的形式為<h1></h1>則FTL標(biāo)記的形式是<#list></#list>(此處h1標(biāo)記和list指令沒(méi)有任何功能上的對(duì)應(yīng)關(guān)系,只是做為說(shuō)明使用一下)。

    有三種FTL標(biāo)記:

    1)、開(kāi)始標(biāo)記:<#指令名稱>

    2)、結(jié)束標(biāo)記:</#指令名稱>

    3)、空標(biāo)記:<#指令名稱/>

    注意:

    1) FTL會(huì)忽略標(biāo)記之中的空格,但是,<#和指令 與 </#和指令 之間不能有空格。

    2) FTL標(biāo)記不能夠交叉,必須合理嵌套。每個(gè)開(kāi)始標(biāo)記對(duì)應(yīng)一個(gè)結(jié)束標(biāo)記,層層嵌套。 如:

    <#list>

    <li>

    ${數(shù)據(jù)}

    <#if 變量>

    <p>game over!</p>

    </#if>

    </li>

    </#list>

    注意事項(xiàng):

    1)、FTL對(duì)大小寫(xiě)敏感。所以使用的標(biāo)記及interpolation要注意大小寫(xiě)。name與NAME就是不同的對(duì)象。<#list>是正確的標(biāo)記,而<#List>則不是。

    2)、interpolation只能在文本部分使用,不能位于FTL標(biāo)記內(nèi)。如<#if ${var}>是錯(cuò)誤的,正確的方法是:<#if var>,而且此處var必須為布爾值。

    3)、FTL標(biāo)記不能位于另一個(gè)FTL標(biāo)記內(nèi)部,注釋例外。注釋可以位于標(biāo)記及interpolation內(nèi)部。

    三、表達(dá)式

    1、直接指定值:

    1-1、字符串:

    由雙引號(hào)或單引號(hào)括起來(lái)的字符串,其中的特殊字符(如' " \等)需要轉(zhuǎn)義。

    1-2、raw字符串:

    有一種特殊的字符串稱為raw字符串,被認(rèn)為是純文本,其中的\和{等不具有特殊含義,該類字符串在引號(hào)前面加r,下面是一個(gè)例子:

    ${r"/${data}"year""}屏幕輸出結(jié)果為:/${data}"year"

    轉(zhuǎn)義    含義

    序列  

    \"  雙引號(hào)(u0022)

    \'  單引號(hào)(u0027)

    \\  反斜杠(u005C)

    \n  換行(u000A)

    \r  Return (u000D)

    \t  Tab (u0009)

    \b  Backspace (u0008)

    \f  Form feed (u000C)

    \l  <

    \g  >

    \a  &

    \{  {

    \xCode  4位16進(jìn)制Unicode代碼

    1-3、數(shù)字:直接輸入,不需要引號(hào)

    1)、精度數(shù)字使用“.”分隔,不能使用分組符號(hào)

    2)、目前版本不支持科學(xué)計(jì)數(shù)法,所以“1E3”是錯(cuò)誤的

    3)、不能省略小數(shù)點(diǎn)前面的0,所以“.5”是錯(cuò)誤的

    4)、數(shù)字8、+8、08和8.00都是相同的

    1-4、布爾值:true和false,不使用引號(hào)

    1-5、序列:由逗號(hào)分隔的子變量列表,由[]方括號(hào)限定。

    1)、子變量列表可以是表達(dá)式

    2)、可以使用數(shù)字范圍定義數(shù)字序列,<b>不需要方括號(hào)限定</b>,例如2..5等同于[2, 3, 4, 5],但是更有效率,可以定義反遞增范圍如:5..2。

    1-6、散列(hash)

    1)、由逗號(hào)分隔的鍵/值列表,由{}大括號(hào)限定,鍵和值之間用冒號(hào)分隔,如:{"key1":valu1,"key2":"character string"....}

    2)、鍵和值都是表達(dá)式,但是鍵必須是字符串。

    2、獲取變量:

    2-1、頂層變量:${變量名}

    變量名只能是字母、數(shù)字、下劃線、$、#、@ 的組合,且不能以數(shù)字開(kāi)頭。

    2-2、散列:有兩種方法

    1)、點(diǎn)語(yǔ)法:變量名字和頂層變量的名字受同樣的限制

    2)、方括號(hào)語(yǔ)法:變量名字無(wú)限制,可以是任意的表達(dá)式的結(jié)果

    book.author.name      散列表的多級(jí):{"book":{"author":{"name":"張三"},"price":{"price1":200,"price2":500}},"book":{"author":{"name":"張三"}}

    book.author.["name"]

    book["author"].name

    book["author"]["name"]

    以上是等價(jià)的。

    2-3、序列:使用散列的方括號(hào)語(yǔ)法獲取變量,方括號(hào)中的表達(dá)式結(jié)果必須為數(shù)字。注意:第一個(gè)項(xiàng)目的索引為0。可以使用

    [startindex..endindex]語(yǔ)法獲取序列片段。

    2-4、特殊變量:FreeMarker內(nèi)定義變量,使用.variablename語(yǔ)法訪問(wèn)。

    3、字符串操作

    3-1、interpolation:使用${}或#{}在文本部分插入表達(dá)式的值,例如:

    ${"hello${username}!"}

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

    也可以使用+來(lái)獲得同樣的結(jié)果:

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

    ${username+username+username}

    注意:${}只能用于文本部分而不能出現(xiàn)于標(biāo)記內(nèi)。

    <#if ${user.login}>或<#if "${user.login}">都是錯(cuò)誤的;

    <#if user.login>是正確的。

    本例中user.login的值必須是布爾類型。

    3-2、子串:

    舉例說(shuō)明:假如user的值為"Big Joe"

    ${user[0]}${user[4]}結(jié)果是:BJ

    ${user[1..4]}結(jié)果是:ig J

    4、序列操作

    4-1、連接操作:可以使用+來(lái)操作,例如:

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

    5、散列操作

    5-1、連接操作:可以使用+來(lái)操作,如果有相同的KEY,則右邊的值會(huì)替代左邊的值,例如:

    {"title":散列,"author":"emma"}+{"month":5,"day":5}+{"month":6}結(jié)果month的值就是6。

    6、算術(shù)運(yùn)算

    6-1、操作符:+、-、*、/、%

    除+號(hào)以外的其他操作符兩邊的數(shù)據(jù),必須都是數(shù)字類型。

    如果+號(hào)操作符一邊有一個(gè)字符型數(shù)據(jù),會(huì)自動(dòng)將另一邊的數(shù)據(jù)轉(zhuǎn)換為字符型數(shù)據(jù),運(yùn)算結(jié)果為字符型數(shù)據(jù)。

    6-2、比較操作符:

    1)、=

    2)、==

    3)、!=

    4)、<

    5)、<=

    6)、>

    7)、>=

    1-3的操作符,兩邊的數(shù)據(jù)類型必須相同,否則會(huì)產(chǎn)生錯(cuò)誤

    4-7的操作符,對(duì)于日期和數(shù)字可以使用,字符串不可以使用。

    注意:

    1)、FreeMarker是精確比較,所以"x" "x " "X"是不等的

    2)、因?yàn)?lt;和>對(duì)FTL來(lái)說(shuō)是開(kāi)始和結(jié)束標(biāo)記,所以,可以用兩種方法來(lái)避免這種情況:

    一種是使用括號(hào)<#if (a<b)>

    另一是使用替代輸出,對(duì)應(yīng)如下:

    <  lt

    <= lte

    >  gt

    >= gte

    6-3、邏輯操作符:只能用于布爾值,否則會(huì)出現(xiàn)錯(cuò)誤。

    &&(and)與運(yùn)算

    ||(or)或運(yùn)算

    !(not)非運(yùn)算

    6-4、內(nèi)建函數(shù):使用方法類似于訪問(wèn)散列的子變量,只是使用?代替.例如:${test?upper_case?html}

    常用的內(nèi)建函數(shù)列舉如下:

    1)、字符串使用

    html:對(duì)字符串進(jìn)行HTML編碼

    cap_first:字符串第一個(gè)字母大寫(xiě)

    lower_first:字符串第一個(gè)字母小寫(xiě)

    upper_case:將字符串轉(zhuǎn)換成大寫(xiě)

    trim:去年字符前后的空白字符

    2)、序列使用:

    size:獲得序列中元素的數(shù)目

    3)、數(shù)字使用:

    int:取得數(shù)字的整數(shù)部分

    7、操作符的優(yōu)先順序:

    后綴:[subbarName][subStringRange].(mathodParams)

    一元:+expr、-expr、! (not)

    內(nèi)建:?

    乘法:*、/、%

    加法:+、-

    關(guān)系:<、<=、>、>= (lt、lte、gt、gte)

    相等:=、==、!=

    邏輯與:&& (and)

    邏輯或:|| (or)

    數(shù)字范圍:..

    四、interpolation

    inperpolation只能用于文本,有兩種類型:通用interpolation及數(shù)字interpolation

    1、通用interpolation

    如${expr}

    1-1、插入字符串值:直接輸出表達(dá)式結(jié)果。

    1-2、插入數(shù)字值:根據(jù)缺省格式(由setting指令設(shè)置)將表達(dá)式結(jié)果轉(zhuǎn)換成文本輸出;可以使用內(nèi)建函數(shù)string來(lái)格式化單個(gè)interpolation

    如:

    <#setting number_format="currency" />

    <#assign answer=42 />

    ${answer}  <#-- ¥42.00 -->

    ${answer?string}  <#-- ¥42.00 -->

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

    ${answer?string.currency}  <#-- ¥42.00 -->

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

    1-3、插入日期值:根據(jù)缺省格式(由setting指令設(shè)置)將表達(dá)式結(jié)果轉(zhuǎn)換成文本輸出;可以使用內(nèi)建函數(shù)string來(lái)格式化單個(gè)interpolation

    如:

    ${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、插入布爾值:根據(jù)缺省格式(由setting指令設(shè)置)將表達(dá)式結(jié)果轉(zhuǎn)換成文本輸出;可以使用內(nèi)建函數(shù)string來(lái)格式化單個(gè)interpolation

    如:

    <#assign foo=ture />

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

    2、數(shù)字interpolation:

    有兩種形式:

    1)、#{expr}

    2)、#{expr;format}:format可以用來(lái)格式化數(shù)字,format可以是如下:

    mX:小數(shù)部分最小X位

    MX:小數(shù)部分最大X位

    例如:

    <#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 -->

    雜項(xiàng)

    一、用戶定義指令

    變換器變量是兩種不同類型的用戶自定義指令,他們的區(qū)別是:

    宏可以在模板中用macro指令來(lái)定義

    變換器是在模板外由程序定義

    1、宏:和某個(gè)變量關(guān)聯(lián)的模板片段,以便在模板中通過(guò)用戶自定義指令使用該變量

    1-1、基本用法:

    例如:

    <#macro greet>

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

    </#macro>

    使用時(shí):

    <@greet></@greet>

    如果沒(méi)有體內(nèi)容也可以用

    <@greet />

    1-2、變量:

    1)、可以在宏定義之后定義參數(shù),宏參數(shù)是局部變量,只在宏定義中有效。如:

    <#macro greet person>

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

    </#macro>

    使用時(shí):

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

    輸出為:

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

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

    注意:宏的參數(shù)是FTL表達(dá)式,所以,person=emma和上面的例子中具有不同的意義,這意味著將變量emma的值傳給person,這個(gè)值可能是任意一種數(shù)據(jù)類型,甚至是一個(gè)復(fù)雜的表達(dá)式。

    宏可以有多個(gè)參數(shù),使用時(shí)參數(shù)的次序是無(wú)關(guān)的,但是只能使用宏中定義的參數(shù),并且對(duì)所有參數(shù)賦值。如:

    <#macro greet person color>

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

    </#macro>

    使用時(shí):

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

    <@greet person="emma" />錯(cuò)誤,color沒(méi)有賦值,此時(shí),如果在定義宏時(shí)為color定義缺省值<#macro greet person color="black">這樣的話,這個(gè)使用方法就是正確的。

    <@greet color="black" person="emma" bgcolor="yellow" />錯(cuò)誤,宏greet定義中未指定bgcolor這個(gè)參數(shù)

    2、嵌套內(nèi)容:

    2-1、自定義指令可以有嵌套內(nèi)容,使用<#nested>指令,執(zhí)行自定義指令開(kāi)始和結(jié)束標(biāo)記之間的模板片段。例如:

    <#macro greet>

    <p>

    <#nested>

    </p>

    </#macro>

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

    輸出為

    <p>hello Emma!</p>

    2-2、<#nested>指令可以被多次調(diào)用,例如

    <#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、嵌套的內(nèi)容可以是有效的FTL,例如:

    <#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>

    輸出為:

    <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、宏定義中的局部變量對(duì)嵌套內(nèi)容是不可見(jiàn)的,例如:

    <#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>

    輸出結(jié)果為

    test 3/1:???

    test 3/2:???

    test 3/3:???

    2-5、在宏定義中使用循環(huán)變量,通常用來(lái)重復(fù)嵌套內(nèi)容,基本用法為:作為nested指令的參數(shù),傳遞循環(huán)變量的實(shí)際值,而在調(diào)用自定義指令時(shí),在標(biāo)記的參數(shù)后面指定循環(huán)變量的名字。

    例如:

    <#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>

    輸出結(jié)果是

    1. 0.5

    2. 1

    3. 1.5

    4. 2last!

    注意:指定循環(huán)變量的數(shù)目和用戶定義指令開(kāi)始標(biāo)記指定的不同不會(huì)有問(wèn)題

    調(diào)用時(shí),少指定循環(huán)變量,多指定的值會(huì)不見(jiàn)

    調(diào)用時(shí),多指定循環(huán)變量,多余的循環(huán)變量不會(huì)被創(chuàng)建

    二、在模板中定義變量

    1、在模板中定義的變量有三種類型

    1-1、plain變量:可以在模板的任何地方訪問(wèn),包括使用include指令插入的模板,使用assign指令創(chuàng)建和替換。

    1-2、局部變量:在宏定義體中有效,使用local指令創(chuàng)建和替換。

    1-3、循環(huán)變量:只能存在于指令的嵌套內(nèi)容,由指令(如list)自動(dòng)創(chuàng)建。

    注意:

    1)、宏的參數(shù)是局部變量,不是循環(huán)變量。

    2)、局部變量隱藏同名的plain變量

    3)、循環(huán)變量隱藏同名的plain變量和局部變量。

    例如:

    <#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)、內(nèi)部循環(huán)變量隱藏同名的外部循環(huán)變量

    <#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)、模板中的變量會(huì)隱藏?cái)?shù)據(jù)模型中的同名變量,如果需訪問(wèn)數(shù)據(jù)模型中的變量,使用特殊變量global。

    例如:

    假設(shè)數(shù)據(jù)模型中的user值為Emma

    <#assign user="Man">

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

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

    posted @ 2009-10-29 13:23 junly 閱讀(1867) | 評(píng)論 (0)編輯 收藏

     開(kāi)始--運(yùn)行--cmd 進(jìn)入命令提示符 輸入netstat -ano 即可看到所有連接的PID 之后在任務(wù)管理器中找到這個(gè)PID所對(duì)應(yīng)

    的程序如果任務(wù)管理器中沒(méi)有PID這一項(xiàng),可以在任務(wù)管理器中選"查看"-"選擇列"

            經(jīng)常,我們?cè)趩?dòng)應(yīng)用的時(shí)候發(fā)現(xiàn)系統(tǒng)需要的端口被別的程序占用,如何知道誰(shuí)占有了我們需要的端口,很多人

    都比較頭疼,下面就介紹一種非常簡(jiǎn)單的方法,希望對(duì)大家有用

    假如我們需要確定誰(shuí)占用了我們的9050端口

    1、Windows平臺(tái)
    在windows命令行窗口下執(zhí)行:

    C:\>netstat -aon|findstr "9050"TCP    127.0.0.1:9050         0.0.0.0:0              LISTENING       2016

    看到了嗎,端口被進(jìn)程號(hào)為2016的進(jìn)程占用,繼續(xù)執(zhí)行下面命令:

    C:\>tasklist|findstr "2016"tor.exe                     2016 Console                 0     16,064 K
    很清楚吧,tor占用了你的端口。

    posted @ 2009-10-29 13:10 junly 閱讀(191) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共18頁(yè): First 上一頁(yè) 10 11 12 13 14 15 16 17 18 
    主站蜘蛛池模板: 日韩亚洲人成在线综合| 亚洲AV无码乱码在线观看富二代| 好爽…又高潮了毛片免费看| 久久精品无码专区免费东京热| 精品国产免费一区二区三区香蕉| 男女一进一出抽搐免费视频| 一级毛片正片免费视频手机看| 免费福利在线观看| 羞羞视频免费观看| 一级成人毛片免费观看| 国产成人高清精品免费观看| 两个人的视频www免费| 青柠影视在线观看免费| 小草在线看片免费人成视久网| 99精品热线在线观看免费视频| 99视频在线精品免费| 成人免费大片免费观看网站| 性生交片免费无码看人| 日本无卡码免费一区二区三区| 国产免费人人看大香伊| 亚洲欧洲久久久精品| 国产AⅤ无码专区亚洲AV| 国产V亚洲V天堂无码| 亚洲高清无在码在线无弹窗 | 免费人成黄页在线观看日本| 国产一精品一av一免费爽爽| 日韩人妻一区二区三区免费| 在线看片免费人成视久网| 18禁免费无码无遮挡不卡网站| 国内免费高清在线观看| 暖暖在线日本免费中文| 亚洲国产一成久久精品国产成人综合 | 亚洲国产夜色在线观看| 国产精品亚洲综合久久| 一级毛片大全免费播放下载| baoyu122.永久免费视频| 亚州免费一级毛片| 四虎永久成人免费影院域名| 亚洲人成人网站色www| 亚洲美女免费视频| 精品久久久久亚洲|