Thymeleaf 之 內置對象、定義變量、URL參數及標簽自定義屬性
本文章來自【知識林】
如標題所述,這篇文章主要講述Thymeleaf中的內置對象(list解析、日期格式化、數字格式化等)、定義變量、獲取URL的參數和在頁面標簽中自定義屬性的應用。
如果對Thymeleaf的基本使用、maven依賴等不清楚的可以先閱讀我的另一篇文章《Thymeleaf 之 初步使用》。
- Controller部份
@Controller public class IndexController { @GetMapping(value = "index") public String index(Model model, HttpServletRequest request) { List<String> datas = new ArrayList<String>(); datas.add("知識林"); datas.add("http://www.zslin.com"); datas.add("393156105"); model.addAttribute("datas", datas); model.addAttribute("curDate", new Date()); model.addAttribute("money", Math.random()*100); return "index"; } }
在這個控制器的Model中存放了這樣幾個數據:一個String類型的列表、一個日期對象和一個數值,這些東西在實際應用開發過程中應用非常廣泛,下面具體看一下在Thymeleaf中是如何解析這些數據的。
- 日期格式化
<span th:text="${#dates.format(curDate, 'yyyy-MM-dd HH:mm:ss')}"></span>
說明: 使用內置對象dates
的format
函數即可對日期進行格式化,在format
函數中,第一個參數是日期對象,對二兩個參數為日期格式(規則跟SimpleDateFormat
一樣)
需要注意的是:
· 內置對象一般都以s
結尾,如dates
、lists
、numbers
等
· 在使用內置對象是在對象名前都需要加#
號。
- 數字格式化
<span th:text="${#numbers.formatDecimal(money, 0, 2)}"></span>
說明: 此示例表示保留兩位小數位,整數位自動;
<span th:text="${#numbers.formatDecimal(money, 3, 2)}"></span>
說明: 此示例表示保留兩位小數位,3位整數位(不夠的前加0)
- 獲取列表長度
<span th:text="${#lists.size(datas)}"></span>
說明: 使用#lists.size
來獲取List的長度。
- 獲取URL參數值
<span th:text="${#httpServletRequest.getParameter('page')}"></span>
說明: 當訪問http://localhost:1105/index?page=5
時頁面將會得到page
對應的值:5
。
- 定義變量
<div th:with="curPage=${#httpServletRequest.getParameter('page')}"> <h3>當前頁碼:<span th:text="${curPage}"></span></h3> </div>
說明: 同樣,當訪問http://localhost:1105/index?page=5
時,頁面將顯示:當前頁碼:5
,說明用th:with
來定義變量,多個用,
號隔開,使用范圍在當前標簽內。
- 自定義標簽屬性
在Thymeleaf中可以使用th:
加上標簽的任何屬性進行賦值,但有些時候會遇到自定義的屬性,再用th:
加自定義的屬性則會無效。比如:需要對<span>
標簽增加objName
和objId
這樣的屬性,在非Thymeleaf情況下是這樣:
<span objId="1" objName="知識林"></span>
變量情況是:
<span objId="${obj.id}" objName="${obj.name}"></span>
在Thymeleaf下則是:
<span th:attr="myDate=${#dates.format(curDate, 'yyyy-mm-dd')}, myMoney=${money}"></span>
說明: 在頁面上查看源代碼可以看到:<span myMoney="91.6059494319957" myDate="2016-31-02"></span>
,說明自定義屬性用:th:attr
,多個屬性用,
隔開。
- 內置對象
上面簡單描述了比較常用的dates
、lists
、numbers
這幾個內置對象,在Thymeleaf還有很多的內置對象,像strings
也非常常用,用法跟java.lang.String
類的用法一樣。
在Thymeleaf中的內置對象有:
#dates
:日期格式化內置對象,具體方法可以參照java.util.Date
;
#calendars
:類似於#dates
,但是是java.util.Calendar
類的方法;
#numbers
: 數字格式化;
#strings
:字符串格式化,具體方法可以參照java.lang.String
,如startsWith
、contains
等;
#objects
:參照java.lang.Object
;
#bools
:判斷boolean類型的工具;
#arrays
:數組操作的工具;
#lists
:列表操作的工具,參照java.util.List
;
#sets
:Set操作工具,參照java.util.Set
;
#maps
:Map操作工具,參照java.util.Map
;
#aggregates
:操作數組或集合的工具;
#messages
:操作消息的工具。