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

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

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

    不做浮躁的人
    正在行走的人...
    posts - 171,  comments - 51,  trackbacks - 0
    thymeleaf,我個(gè)人認(rèn)為是個(gè)比較好的模板,性能也比一般的,比如freemaker的要高,而且把將美工和程序員能夠結(jié)合起來(lái),美工能夠在瀏覽器中查看靜態(tài)效果,程序員可以在應(yīng)用服務(wù)器查看帶數(shù)據(jù)的效果。

    thymeleaf是一個(gè)支持html原型的自然引擎,它在html標(biāo)簽增加額外的屬性來(lái)達(dá)到模板+數(shù)據(jù)的展示方式,由于瀏覽器解釋html時(shí),忽略未定義的標(biāo)簽屬性,因此thymeleaf的模板可以靜態(tài)運(yùn)行。

    由于thymeleaf在內(nèi)存緩存解析后的模板,解析后的模板是基于tree的dom節(jié)點(diǎn)樹(shù),因此thymeleaf適用于一般的web頁(yè)面,不適合基于數(shù)據(jù)的xml。

    thymeleaf 的context,即提供數(shù)據(jù)的地方,基于web的context,即WebContext相對(duì)context增加 param,session,application變量,并且自動(dòng)將request atttributes添加到context variable map,可以在模板直接訪問(wèn)。

    在模板處理前,thymeleaf還會(huì)增加一個(gè)變量execInfo,比如${execInfo.templateName},${execInfo.now}等。

    數(shù)據(jù)訪問(wèn)模式:
    ${...},變量引用模式,比如${myBean.property},如果用springDialect,則使用的是spring EL,如果不用spring,則用的ognl。
    *{...},選擇表達(dá)式,一般是th:object之后,直接取object中的屬性。當(dāng)沒(méi)有選取對(duì)象時(shí),其功能等同${...},*{firstName}也等同于${#object.firstName},#object代表當(dāng)前選擇的對(duì)象。
    @{...}鏈接url的表達(dá)式。th:href="@{/xxx/aa.do(id=${o.id})",會(huì)自動(dòng)進(jìn)行url-encoding的處理。@{...}內(nèi)部可以是需要計(jì)算的表達(dá)式,比如:
    th:href=”@{'/details/'+${user.login}(orderId=${o.id})}"

    #{...},i18n,國(guó)際化。
    需要注意的:
    #{${welcomeMsgKey}(${session.user.name})}:i18n message支持占位。各個(gè)表達(dá)式支持嵌套。

    表達(dá)式基本對(duì)象:
    #ctx:context object
    #root或者#vars
    #locale
    #httpServletRequest
    #httpSession

    表達(dá)式功能對(duì)象:
    #dates:java.util.Date的功能方法類(lèi)。
    #calendars:類(lèi)似#dates,面向java.util.Calendar
    #numbers:格式化數(shù)字的功能方法類(lèi)。
    #strings:字符串對(duì)象的功能類(lèi),contains,startWiths,prepending/appending等等。
    #objects:對(duì)objects的功能類(lèi)操作。
    #bools:對(duì)布爾值求值的功能方法。
    #arrays:對(duì)數(shù)組的功能類(lèi)方法。
    #lists:對(duì)lists功能類(lèi)方法
    #sets
    #maps
    #aggregates:對(duì)數(shù)組或者集合創(chuàng)建聚合的功能方法,
    th:text="${#aggregates.sum(o.orderLines.{purchasePrice * amount})}"

    #messages:在變量表達(dá)式中獲取外部信息的功能類(lèi)方法。
    #ids:處理可能重復(fù)的id屬性的功能類(lèi)方法。


    條件操作:
    (if)?(then):滿足條件,執(zhí)行then。
    (if)?(then):(else)
    (value)?:(defalutValue)


    一些標(biāo)簽:
    th:text="${data}",將data的值替換該屬性所在標(biāo)簽的body。字符常量要用引號(hào),比如th:text="'hello world'",th:text="2011+3",th:text="'my name is '+${user.name}"
    th:utext,和th:text的區(qū)別是"unescaped text"。
    th:with,定義變量,th:with="isEven=${prodStat.count}%2==0",定義多個(gè)變量可以用逗號(hào)分隔。
    th:attr,設(shè)置標(biāo)簽屬性,多個(gè)屬性可以用逗號(hào)分隔,比如th:attr="src=@{/image/aa.jpg},title=#{logo}",此標(biāo)簽不太優(yōu)雅,一般用的比較少。
    th:[tagAttr],設(shè)置標(biāo)簽的各個(gè)屬性,比如th:value,th:action等。
    可以一次設(shè)置兩個(gè)屬性,比如:th:alt-title="#{logo}"
    對(duì)屬性增加前綴和后綴,用th:attrappend,th:attrprepend,比如:th:attrappend="class=${' '+cssStyle}"
    對(duì)于屬性是有些特定值的,比如checked屬性,thymeleaf都采用bool值,比如th:checked=${user.isActive}
    th:each, 循環(huán),<tr th:each="user,userStat:${users}">,userStat是狀態(tài)變量,有 index,count,size,current,even,odd,first,last等屬性,如果沒(méi)有顯示設(shè)置狀態(tài)變量,thymeleaf會(huì)默 認(rèn)給個(gè)“變量名+Stat"的狀態(tài)變量。
    th:if or th:unless,條件判斷,支持布爾值,數(shù)字(非零為true),字符,字符串等。
    th:switch,th:case,選擇語(yǔ)句。 th:case="*"表示default case。
    th:fragment,th:include,th:substituteby:fragment為片段標(biāo)記,指定一個(gè)模板內(nèi)一部分代碼為一個(gè)片段,然后在其它的頁(yè)面中用th:include或th:substituteby進(jìn)行包含。
    包含的格式為,格式內(nèi)可以為表達(dá)式,比如th:include="footer::$(user.logined)?'logined':'notLogin'":
    "templatename::fragname",指定模板內(nèi)的指定片段。
    "templateName::[domselector]",指定模板的dom selector,被包含的模板內(nèi)不需要th:fragment.
    ”templatename",包含整個(gè)模板。
    th:include和th:substituteby的區(qū)別在于前者包含片段的內(nèi)容到當(dāng)前標(biāo)簽內(nèi),后者是用整個(gè)片段(內(nèi)容和上一層)替換當(dāng)前標(biāo)簽(不僅僅是標(biāo)簽內(nèi)容)。
    th:remove="all|body|tag|all-but-first",一般用于將mock數(shù)據(jù)在真實(shí)環(huán)境中移除,all表示移除標(biāo)簽以及標(biāo)簽內(nèi)容,body只移除內(nèi)容,tag只移除所屬標(biāo)簽,不移除內(nèi)容,all-but-first,除第一條外其它不移除。


    由 于一個(gè)標(biāo)簽內(nèi)可以包含多個(gè)th:x屬性,其先后順序?yàn)椋篿nclude,each,if/unless/switch/case,with,attr /attrprepend/attrappend,value/href,src ,etc,text/utext,fragment,remove。

    內(nèi)聯(lián)文本:[[...]]內(nèi)聯(lián)文本的表示方式,使用時(shí),必須先用th:inline="text/javascript/none"激活,th:inline可以在父級(jí)標(biāo)簽內(nèi)使用,甚至作為body的標(biāo)簽。內(nèi)聯(lián)文本盡管比th:text的代碼少,但是不利于原型顯示。

    內(nèi)聯(lián)js:
    <scriptth:inline="javascript">
    /*<![CDATA[*/
    ...
    var username = /*[[${sesion.user.name}]]*/ 'Sebastian';
    ...
    /*]]>*/
    </script>

    js附加代碼:
    /*[+
    var msg = 'This is a working application';
    +]*/

    js移除代碼:
    /*[- */
    var msg = 'This is a non-working template';
    /* -]*/
    模板緩存:
    1、指定特定的緩存:
    templateResolver.setCacheable(false);
    templateResolver.getCacheablePatternSpec().addPattern("/users/*");
    2、清除緩存:
    templateEngine.clearTemplateCache();
    templateEngine.clearTemplateCacheFor("/users/userList");




    補(bǔ)充點(diǎn)url知識(shí):
    1、絕對(duì)路徑:http://news.sina.com.cn
    2、相對(duì)路徑:
        2.1:頁(yè)面相對(duì)路徑,一般指相對(duì)當(dāng)前請(qǐng)求的url,比如 aa.do
        2.2:上下文相對(duì),比如/xxx/aa.do
        2.3:服務(wù)器相對(duì)路徑,比如~/other/xxx/aa.do,允許切換到相同服務(wù)器不同上下文的路徑。

    posted on 2013-02-07 16:24 不做浮躁的人 閱讀(161578) 評(píng)論(3)  編輯  收藏

    FeedBack:
    # re: thymeleaf 學(xué)習(xí)筆記
    2013-04-14 11:44 | Yockii
    thymeleaf適用于一般的web頁(yè)面,不適合基于數(shù)據(jù)的xml。
    這點(diǎn)不同意,參數(shù)中可以設(shè)定不做緩存喔。

    對(duì)于屬性是有些特定值的,比如checked屬性,thymeleaf都采用bool值,比如th:checked=${user.isActive}
    這里,user.isActive=false時(shí)應(yīng)該checked是不會(huì)出現(xiàn)這個(gè)attr的。

    總的來(lái)說(shuō)thymeleaf是不錯(cuò)的,但內(nèi)聯(lián)不是太好用,經(jīng)常js的alert的時(shí)候,不得不把后半個(gè)括號(hào)換一行,如alert("aaa" + /*[[#{message}]]*/'message');
    這種情況,會(huì)把后面的);都刪掉所以只能寫(xiě)成
    alert("aaa" + /*[[#{message}]]*/'message'
    );
    這樣的形式。
    總得來(lái)說(shuō)你總結(jié)的不錯(cuò),但沒(méi)找到我想要的,呵呵。  回復(fù)  更多評(píng)論
      
    # re: thymeleaf 學(xué)習(xí)筆記
    2015-12-04 16:56 | naturezhm
    @Yockii
    “thymeleaf適用于一般的web頁(yè)面,不適合基于數(shù)據(jù)的xml”
    這個(gè)是官方自己聲明的,原文如下
    “if you are generating XML files with sizes around the tens of megabytes in a single template execution, you probably should not be using Thymeleaf.”  回復(fù)  更多評(píng)論
      
    # re: thymeleaf 學(xué)習(xí)筆記[未登錄](méi)
    2015-12-21 03:01 | Kurt
    @naturezhm

    你曲解了原文啊。
    原文意思是“如果你要一次生成數(shù)十M的xml的話,最好不要用Thymeleaf”。
      回復(fù)  更多評(píng)論
      

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2015年12月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(9)

    隨筆分類(lèi)(31)

    隨筆檔案(75)

    文章分類(lèi)(1)

    文章檔案(3)

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲一区二区三区免费观看| 女人被弄到高潮的免费视频| 亚洲人成在线播放| 日韩电影免费在线观看视频| fc2免费人成在线| 亚洲精品美女在线观看播放| 国产成人免费A在线视频| 日韩免费电影网站| 日韩色视频一区二区三区亚洲| 亚洲精品乱码久久久久久中文字幕 | 暖暖在线日本免费中文| 怡红院免费的全部视频| 亚洲免费福利在线视频| 亚洲无线码一区二区三区| 成人人免费夜夜视频观看| A级毛片高清免费视频在线播放| 在线综合亚洲中文精品| 亚洲女久久久噜噜噜熟女 | 亚洲AV无码专区国产乱码电影| 成年女人色毛片免费看| 国产免费爽爽视频在线观看 | 国产免费人成视频尤勿视频| 亚洲AV色吊丝无码| 亚洲男人都懂得羞羞网站| 亚洲精品tv久久久久久久久久| 999国内精品永久免费视频| 成在线人视频免费视频| 国产亚洲蜜芽精品久久| 亚洲国产美女在线观看| 亚洲av无码国产精品夜色午夜| 四虎亚洲国产成人久久精品 | 亚洲天堂中文字幕在线| 午夜时刻免费入口| 永久在线观看www免费视频| 国产拍拍拍无码视频免费| 一级做a爱过程免费视频高清| 亚洲heyzo专区无码综合| 亚洲视频一区二区三区| 亚洲欧洲国产精品香蕉网| 国产成人毛片亚洲精品| 亚洲国产小视频精品久久久三级 |