Springboot-Thymeleaf常⽤语法
引⼊ Thymeleaf
修改 html 标签⽤于引⼊ thymeleaf 引擎,这样才可以在其他标签⾥使⽤ th:* 语法,这是下⾯语法的前提。
<html lang="en" xmlns:th="">
标准表达式语法
${…} 变量表达式,(常⽤)
变量表达式(美元表达式),⽤于访问容器上下⽂环境中的变量,功能同jstl中${}
⼀、可以获取对象的属性和⽅法
⼆、可以使⽤ctx,vars,locale,request,response,session,servletContext内置对象
可以使⽤dates,numbers,strings,objects,arrays,lists,sets,maps等内置⽅法(重点介绍)
@{…} 链接表达式,(常⽤)
链接表达式好处不管是静态资源的引⽤,form表单的请求,凡是链接都可以⽤@{…} 。这样可以动态获取项⽬路径,即便项⽬名变了,依然可以正常访问
#{…} 消息表达式,
消息表达式⼀般⽤于国际化的场景。占时放弃 ⼀般都和 th:text⼀起使⽤
加xxx.properties配置⽂件中的消息 这个就不说了
除⾮你⽹站很⼤⽽且很⽕ 否则 ⼀般都不会去国际化的特费劲
如果⾮要⽤的话 ⽹上⼀⼤堆相关的资料 很简单
*{…} 选择变量表达式,变量表达式功能
没什么卵⽤ 使⽤${}就⾏了,当然如果想了解的话我这⾥演⽰下
*{}这个表达式,是获取指定的对象中的变量值。需要提前指定对象,可以是集合中的某个对象,也可以是单独的⼀个对象。
<h1 text="${user.name}"></h1>
<h1 text="${user.age}"></h1>
<div object="${user}">
<h1 text="*{name}"></h1>
<h1 text="*{age}"></h1>
</div>
他俩等价效果,如果在⼤量的 字段情况下使⽤ *{} 还是可以的
改变当前元素⽂本内容
<p text="'Hello!, ' + ${name} + '!'">name</p>
可以看出获取变量值⽤ $ 符号,
对于javaBean的话使⽤变量名.属性名⽅式获取,这点和 EL 表达式⼀样.
另外 $ 表达式只能写在th标签内部,不然不会⽣效,上⾯例⼦就是使⽤ th:text 标签的值替换 p 标签⾥⾯的值,⾄于 p ⾥⾯的原有的值只是为了给前端开发时做展⽰⽤的.这样的话,很好的做到了前后端分离.
引⼊ URL
Thymeleaf 对于 URL 的处理是通过语法 @{…} 来处理的
<a href="@{www.baidu}">绝对路径</a>
<a href="@{/}">相对路径(主页)</a>
类似的标签有:th:href 和 th:src
⽐如在Springboot 默认静态资源都是请求resources/static/*⽬录下 也就是是 /xxx.css 就能访问到扔了
引⼊css
<link rel="stylesheet"type="text/css"href="@{/css/login.css}">
引⼊js
<script src="@{/js/jquery.js}"type="text/javascript"></script>
字符串拼接
很多时候可能我们只需要对⼀⼤段⽂字中的某⼀处地⽅进⾏拼接,可以通过字符串拼接操作完成:
<span text="'Welcome to our application, ' + ${user.name} + '!'">
⼀种更简洁的⽅式是:
<span text="|Welcome to our application, ${user.name}!|">
当然这种形式限制⽐较多,|…|中只能包含变量表达式${…},不能包含其他常量、条件表达式等。
运算符
在表达式中可以使⽤各类算术运算符,例如+, -, *, /, %
<span text="${(0).username}==qwe">false</span>
⽂本内容默认为false ,如果值等于qwe那么⽂本内容就为true
条件
th:if 表⽰条件成⽴时显⽰内容
th:unless 表⽰条件不成⽴时显⽰内容
<p if="${(0).username}==null">Login_if</p>
<p unless="${(0).username}==null">Login_unless</p>
switch
Thymeleaf 同样⽀持多路选择 Switch 结构:
默认属性 default 可以⽤ * 表⽰:
@GetMapping("/switch")
public String switchTest(Model model){
model.addAttribute("gender","⼥");
return"test";
}
<div switch="${gender}">
<p case="⼥">⼥</p>
<p case="男">男</p>
<p case="*">⼈妖</p>
</div>
三元运算
转义字符
gt ⼤于
ge ⼤于等于
eq 等于
lt ⼩于
le⼩于等于
ne不等于
<input value="${20 gt 30?'中年':'青年'}"/>
在th中有⼀个utest不会转义 < >
<p utext="${20 > 30?'中年':'青年'}">男</p>
三元表达式案例:
@GetMapping("/eq")
public String eq(Model model){
model.addAttribute("age",30);
return"test";
}jstl条件标签
<input value="${age gt 40?'中年':'青年'}"/>
⼩技巧: 如果想要给默认值可以这样
<p text="${key_1!=null? key_1:'你好'}"></p>
如果key_1没有值那么默认显⽰你好
循环List
渲染列表数据是⼀种⾮常,常见的场景,例如现在有 n 条记录需要渲染成⼀个表格,该数据集合必须是可以遍历的,使⽤ th:each 标签:
语法: th:each="obj,status : ${objs} "
第⼀个参数是对象, 第⼆个参数是状态
<table >
<tr>
<th>姓名</th>
<th>密码</th>
<th>index</th>
</tr>
<tr each="user,stat : ${users} ">
<td text="${user.username}">胡123</td>
<td text="${user.password}">123456789</td>
<td text="${stat.index}"></td>
</tr>
</table>
状态的⽅法:
index:当前迭代对象的index(从0开始计算)
count: 当前迭代对象的index (从1开始计算)
size 集合的⼤⼩
current 当前迭代变量
even或 odd 当前迭代是否为偶数/奇数(从0开始计算)
first 当前迭代的元素是否是第⼀个
last 当前迭代的元素是否是最后⼀个
案例:
@GetMapping("/index")
public ModelAndView index(){
List<User> list =new ArrayList<>();
list.add(new User(1,"xxxx1","张三"));
list.add(new User(2,"xxxx2","李四"));
list.add(new User(3,"xxxx3","王五"));
ModelAndView mode=new ModelAndView();
mode.addObject("list",list);
mode.setViewName("index");
return mode;
}
<table border="1px">
<tr>
<th>index</th>
<th>count</th>
<th>学⽣ID</th>
<th>学⽣姓名</th>
<th>学⽣年龄</th>
</tr>
<!--为偶数⾏加⾊-->
<tr each="user,stat:${list}"> <td text="${stat.index}"></td>
<td text="${unt}"></td>
<td text="${user.id}"></td>
<td text="${user.userId}"></td>
<td text="${user.name}"></td>
</tr>
</table>
循环Map
<table>
<tr each="map : ${userMap}">
<td text="${map.key} + | --- | + ${map.value}"></td>
</tr>
</table>
内置对象(作⽤域)
#ctx :上下⽂对象
#vars:上下⽂变量
#locale:区域对象
#request:HttpServletRequest 对象
#response:HttpServletResponse 对象
#session:HttpSession 对象
#servletContext:ServletContext 对象
@GetMapping("/object")
public ModelAndView object(HttpServletRequest request){
request.setAttribute("request","request对象");
ModelAndView mode=new ModelAndView();
mode.setViewName("users");
return mode;
}
<p text="${#Attribute('request')}"></p>
<p text="${#Attribute('session')}"></p>
<p text="${#untry}">获取当前页⾯的语⾔</p>
<input id="projectpath"type="hidden"value="${#Scheme()+'://'+#ServerName()+':'+#httpServletRequest.g etServerPort()+#ContextPath()}">
内置⽅法
以直接通过 # 访问。
1、dates:java.util.Date 的功能⽅法
2、calendars:java.util.Calendar 的功能⽅法
3、numbers:格式化数字
4、strings:java.lang.String 的功能⽅法
5、objects:Object 的功能⽅法
6、bools:对布尔求值的⽅法
7、arrays:操作数组的功能⽅法
8、lists:操作集合的功能⽅法
9、sets:操作集合的功能⽅法
10、maps:操作集合的功能⽅法
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论