Thymeleaf 是用于 Web 和独立环境的现代服务器端Java模板引擎。其主要目标是将优雅的自然模板带到您的开发工作流程中— HTML 能够在浏览器中正确显示,并且可以作为静态原型,从而在开发团队中实现更强大的协作。
Thymeleaf 有六种模板模式,包括有 HTML,XML,JavaScript,CSS ,TEXT,RAW。
${...}
变量表达式是OGNL表达式。使用方式:th:xxx="${xxx.xxx}"
,例如:
*{...}
选择表达式 *{...}
需要与 th:object
一同使用,使用方式是首先通过 th:object="${xx.xxx}
获取对象,然后通过 th:xxxx="*{vvvv}"
获取对象 xx.xxx
的属性 vvvv
的值,例如:
后端代码为:
@RequestMapping("/indexThymeleaf")
public String indexThymeleaf(Model model, User user) {
model.addAttribute("title", "springboot整合Thymeleaf");
model.addAttribute("user", user);
return "indexThymeleaf";
}
#{...}
消息表达式 #{...}
允许从外部源(如:.properties)文件中检索特定于语言环境的消息,通过键来引用这引用消息。例如:
首先在 src/main/resources/
下创建文件 messages.properties
,SpringBoot 会自动解析该目录下的该文件,在其中加入 msg = hello
,然后在html 文件中加入下面代码就可以获取其值
注意:文件名必须为 messages.properties
,否则 Thymeleaf 不能解析渲染 cus.val
的值,页面显示为 ??msg_zh_CN??
。
@{...}
使用链接表达式 @{...}
可以是相对路径也可是绝对路径,能够使用 @{…} 的标签主要有 th:action
,th:href
,th:src
,依次相当于 action
,href
,src
。例如:
相对路径
绝对路径
相对路径-通过使用()传参
相对路径-通过 restful风格进行参数传递
~{...}
片段表达式 ~{...}
是一种简单的方法用来表示标记的片段并将其移动到模板中,常与 th:insert
或 th:replace
来插入片段,其中有三种语法:
~{ viewname }
:表示引入完整页面
~{ viewname :: selector}
:表示在指定页面寻找片段 其中selector可为片段名、jquery选择器等
~{ :: selector}
:表示在当前页寻找
例如:
声明模板片段src/main/resources/templates/test.html
:
Insert title here
hello Thymeleaf
引入模板片段:
注意:
#
${#ctx}
:上下文对象,可用于获取其它内置对象${#vars}
:上下文变量${#locale}
:上下文区域设置${#request}
:HttpServletRequest对象${#response}
:HttpServletResponse对象${#session}
:HttpSession对象${#servletContext}
:ServletContext对象例如:
获取 request 中的值:
request.setAttribute("req", "HttpServletRequest");
Request:
获取 session 中的值:
request.getSession().setAttribute("sess", "HttpSession");
Session:
获取 aervletContext:
request.getSession().getServletContext().setAttribute("app", "Application");
Application:
#strings
:字符串工具类,常用方法有:isEmpty(key)
,contains(msg,'T')
,length(msg)
,substring(msg,13,15)
#dates
:时间操作和时间格式化等,常用方法:format(key,'yyy/MM/dd')
,year(key)
#numbers
:格式化数字对象的方法#ids
:处理可能重复的id属性的方法#arrays
:数组工具类#lists
:List 工具类#sets
:Set 工具类#maps
:常用Map方法#objects
:一般对象类,通常用来判断非空#messages
:在变量表达式中获取外部消息的方法,与使用#{…}语法获取的方法相同 用于条件判断主要有 th:if
和 th:unless
,其中 th:unless
表示取反。下面演示它们的用法:
性别:男
性别:女
性别:男
还有 th:switch
的用法如下:
ID 为 1
ID 为 2
ID 为 3
下述实例统一使用一个Controller,主要代码:
@RequestMapping("/indexThymeleaf")
public String indexThymeleaf(Model model) {
List list = new ArrayList<>();
list.add(new User("1", "zhangsan"));
list.add(new User("2", "lisi"));
list.add(new User("3", "wangwu"));
list.add(new User("4", "赵六"));
model.addAttribute("users", list);
Map map = new HashMap<>();
map.put("11", new User("1", "zhangsan"));
map.put("12", new User("2", "lisi"));
map.put("13", new User("3", "wangwu"));
map.put("14", new User("4", "赵六"));
model.addAttribute("usersMap", map);
return "indexThymeleaf";
}
users
中的对象,实例如下。
ID
Name
users
中的对象,实例如下。
ID
Name
index
count
size
even
odd
first
last
状态变量属性:
index
:当前迭代器的索引 从 0 开始count
:当前迭代对象的计数 从 1 开始size
:被迭代对象的长度even/odd
:布尔值,当前循环是否是偶数/奇数 从 0 开始first
:布尔值,当前循环的是否是第一条,如果是返回 true 否则返回 falselast
:布尔值,当前循环的是否是最后一条,如果是则返回 true 否则返回 false
3. 迭代循环Map
迭代循环Map类型的对象。
entrys
ID
Name
ID
Name
ID
Name
通过使用时间工具类#dates
来对日期进行格式化
model.addAttribute("nowDate", new Date());
通过运算符 +
字符串拼接
通过 th:utext
实现字符串转义