不做浮躁的人
          正在行走的人...
          posts - 171,  comments - 51,  trackbacks - 0
          thymeleaf,我個人認為是個比較好的模板,性能也比一般的,比如freemaker的要高,而且把將美工和程序員能夠結合起來,美工能夠在瀏覽器中查看靜態效果,程序員可以在應用服務器查看帶數據的效果。

          thymeleaf是一個支持html原型的自然引擎,它在html標簽增加額外的屬性來達到模板+數據的展示方式,由于瀏覽器解釋html時,忽略未定義的標簽屬性,因此thymeleaf的模板可以靜態運行。

          由于thymeleaf在內存緩存解析后的模板,解析后的模板是基于tree的dom節點樹,因此thymeleaf適用于一般的web頁面,不適合基于數據的xml。

          thymeleaf 的context,即提供數據的地方,基于web的context,即WebContext相對context增加 param,session,application變量,并且自動將request atttributes添加到context variable map,可以在模板直接訪問。

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

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

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

          表達式基本對象:
          #ctx:context object
          #root或者#vars
          #locale
          #httpServletRequest
          #httpSession

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

          #messages:在變量表達式中獲取外部信息的功能類方法。
          #ids:處理可能重復的id屬性的功能類方法。


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


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


          由 于一個標簽內可以包含多個th:x屬性,其先后順序為:include,each,if/unless/switch/case,with,attr /attrprepend/attrappend,value/href,src ,etc,text/utext,fragment,remove。

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

          內聯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");




          補充點url知識:
          1、絕對路徑:http://news.sina.com.cn
          2、相對路徑:
              2.1:頁面相對路徑,一般指相對當前請求的url,比如 aa.do
              2.2:上下文相對,比如/xxx/aa.do
              2.3:服務器相對路徑,比如~/other/xxx/aa.do,允許切換到相同服務器不同上下文的路徑。

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

          FeedBack:
          # re: thymeleaf 學習筆記
          2013-04-14 11:44 | Yockii
          thymeleaf適用于一般的web頁面,不適合基于數據的xml。
          這點不同意,參數中可以設定不做緩存喔。

          對于屬性是有些特定值的,比如checked屬性,thymeleaf都采用bool值,比如th:checked=${user.isActive}
          這里,user.isActive=false時應該checked是不會出現這個attr的。

          總的來說thymeleaf是不錯的,但內聯不是太好用,經常js的alert的時候,不得不把后半個括號換一行,如alert("aaa" + /*[[#{message}]]*/'message');
          這種情況,會把后面的);都刪掉所以只能寫成
          alert("aaa" + /*[[#{message}]]*/'message'
          );
          這樣的形式。
          總得來說你總結的不錯,但沒找到我想要的,呵呵。  回復  更多評論
            
          # re: thymeleaf 學習筆記
          2015-12-04 16:56 | naturezhm
          @Yockii
          “thymeleaf適用于一般的web頁面,不適合基于數據的xml”
          這個是官方自己聲明的,原文如下
          “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.”  回復  更多評論
            
          # re: thymeleaf 學習筆記[未登錄]
          2015-12-21 03:01 | Kurt
          @naturezhm

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

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


          網站導航:
           

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

          常用鏈接

          留言簿(9)

          隨筆分類(31)

          隨筆檔案(75)

          文章分類(1)

          文章檔案(3)

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 弥渡县| 乌海市| 建德市| 白玉县| 玉环县| 西吉县| 达孜县| 额尔古纳市| 石狮市| 汉寿县| 越西县| 珠海市| 铜梁县| 吉首市| 安龙县| 开江县| 金乡县| 南康市| 鄂托克旗| 抚宁县| 城市| 成安县| 百色市| 揭阳市| 海兴县| 九寨沟县| 扬州市| 平果县| 新竹县| 化州市| 波密县| 鸡东县| 建始县| 通江县| 佛学| 南开区| 汝州市| 江油市| 丽江市| 合水县| 密云县|