之前在我们开发项目,做view试图模块时,我们通常是使用JSP,但是随着技术的发展,以及springboot的使用日渐增多,在springboot的项目中已经渐渐不再使用JSP去作为view,而是逐渐采用了Thymeleaf这项技术.
Thymeleaf
简单地说,Thymeleaf是一个html模板引擎,提供了与Spring MVC进行整合的API,可作为MVC架构中Web应用的View层.
而在springboot中导入Thymeleaf的方法也在上文--thymeleaf导入中有所介绍,也不做过多赘述.
但是有一点需要注意:可能在开发过程中,大家会觉得每次更改页面后,都要重新重启服务,很是麻烦与反人类,可以通过配置热启动来改善.
spring.thymeleaf.cache=false
cache是thymeleaf带有的一个缓存区,我们将它设置为false即可不需要每次重启服务,直接刷新界面就可以(但要注意服务端的代码修改的话还是需要重启服务器)
但也不要一味的认为cache的设置就是麻烦的,它主要的作用是要在项目上线时设置为true(不设置默认为true),这样它会提供一个缓存区,不用每次都向服务器请求数据,可以有效的提高响应速度.
Thymeleaf标签
关与Thymeleaf标签的具体使用在官网中的文档中都可以找到,本文只是说一些常用到的标签,详解还请参照官方文档.
数据迭代
在thymeleaf中数据的循环迭代使用的是th:each="x1:${x2}",
作用可以取出域中的数据(数组/集合)去进行循环,通常配合th:text="${x1.x3}"使用.
其中x2为域中存储的数据名称;x1为自己定义的名称,用于在页面中使用数据;x3为x2中的属性,要和get方法名一致.
代码如下:
<tr th:each="g:${list}">
<td th:text="${g.id}"></td>
<td th:text="${g.name}"></td>
</tr>
超链接
在thymeleaf中超链接使用th:href="@{x1(x2=${x3.x4})}",
x1为超链接指向的路径;x2为自己命名的名称;x3,x4为上边数据迭代中的th:text="${x1.x3}"x1和x3.
代码如下:
<a th:href="@{/goods/doDeleteById(id=${g.id})}">
delete
</a>
关于超链接指向地址,还提供了restful风格的写法,
平时我们所写代码地址上带请求数据一般为:a/b/c?id=x
而restful这种风格为:a/b/c/{id}
代码如下:
<a th:href="@{/goods/doFindById/{id}(id=${g.id})}">
update
</a>
在这种语法中,{id}为一个变量表达式,由后面()内的内容补充,如果我们希望在后端的Controller类的方法参数中获得传递的参数,就需要加@PathVariable描述参数.
提交表单
在thymeleaf中提交表单采用th:action="@{x1}"
x1为表单所要提交至的地址.
代码如下:
<form th:action="@{/goods/doUpdateGoods}" method="POST">
<input type="text" name="name" th:value="${goods.name}">
当你觉得上述代码如果显示时有很多属性,而每个属性都需要${对象名.属性名}的方式来显示会很重复,想把对象名直接提取出来,可以通过在表单上加th:object,
代码如下:
<form th:action="@{/goods/doUpdateGoods}" method="POST" th:object="${goods}">
<input type="text" name="name" th:value="${name}">
拓展
1)当我们的url地址没有以"/"开头时,默认这个内容要替换到现在地址栏url最后一个"/"后的内容进行拼接.
2)请求转发:return "forward:doGoodsUI";
重定向:return "redirect:/goods/doGoodsUI";
请求转发由于是服务端内部转发所以可以不写"/",直接跳转;
而重定向由于是二次请求二次响应,且可以跳转至别的资源甚至是别的服务器,所以需要写绝对地址,必须以"/"开头!