一、Thymeleaf简介
Thymeleaf 是一个服务器端Java 模板引擎,用于开发Web 和独立环境项目。 Spring官方支持的服务的渲染模板不包含jsp。不过,与Thymeleaf 和Freemark 一样,Thymeleaf 完全集成了SpringMVC 的视图技术和SpringBoot 的自动配置,您只需要了解Thymeleaf 的语法即可。
二、Thymeleaf的特点
动态和静态相结合:Thymeleaf 可以在联网和非联网环境中运行。这意味着美工人员可以在浏览器中查看静态页面效果,程序员可以查看包含数据的动态页面效果。在服务器上。这是因为它支持HTML原型,在HTML标签上添加额外的属性,实现模板+数据的展示。 thymeleaf 的模板可以静态运行,因为浏览器在解释HTML 时会忽略未定义的标签属性。当数据返回到页面时,Thymeleaf 标签动态替换静态内容并动态渲染页面。即用型:提供Standard和Spring Standard两种方言,直接套用模板即可实现JSTL、OGNL的表达效果,省去了每天套用模板、jstl、更换标签的麻烦。开发人员还可以扩展和创建自定义方言。多种方言支持:Thymeleaf 提供Spring 标准方言和与SpringMVC 完全集成的可选模块。这使您可以快速实现表单绑定、属性编辑器和国际化等功能。 SpringBoot 与SpringBoot 完全集成,为Thymeleaf 提供默认配置,并配置Thymeleaf 的视图解析器。您可以像使用JSP 一样使用Thymeleaf。除了模板语法之外,代码几乎没有什么区别。
三.ssm中添加thymeleaf
1.导入jar包
依赖项groupIdorg.thymeleaf/groupId artifactIdthymeleaf/artifactId version3.0.9.RELEASE/version/依赖项groupIdorg.thymeleaf/groupId artifactIdthymeleaf-spring4/artifactId version3.0.9.RELEASE /版本/依赖项33 360010-101 0!- -使用thymeleaf解析--bean id='templateResolver' class='org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver' 属性名='前缀' value='/WEB-INF/views/'/属性名='后缀' value=' .html'/属性名='templateMode' value='HTML'/属性名='cacheable' value='false'/属性名='characterEncoding' value='UTF-8'/--如果不添加,字符会乱码- -/beanbean id='templateEngine' class='org.thymeleaf.spring4.SpringTemplateEngine' property name='templateResolver' ref='templateResolver' //beanbean class='org .thymeleaf.view. ThymeleafViewResolver' property name=' templateEngine' ref='templateEngine'/!--解决中文乱码--property name='characterEncoding' value='UTF-8'//bean
2.在springmvc.xml文件中设置视图解析器为thymeleaf解析
!--配置视图解析器-- !--bean class='org.springframework.web.servlet.view.InternalResourceViewResolver'-- !--property name='prefix' value='/WEB-INF/' /-- !--property name='suffix ' value='.jsp ' /-!--/bean--
3.删除之前视图解析器为jsp的配置信息,如果两个都配置,谁在前面,用谁
context-param param-namecontextConfigLocation/param-name param-valueclasspath:applicationContext-ioc.xml/param- value /context- paramlistenerlistener-classorg.springframework.web .context.ContextLoaderListener/listener-class /listener servlet-namespringMVC/servlet-name servlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-class !-- SpringMVC 名称设置文件servlet-name-servlet.xml 默认位置:src/resources 如果放在src/resources(maven) contextConfigLocation:classpath: 文件名Web-INF/xx.xml contextConfigLocation:/WEB-INF/xx.xml -- init-param param-namecontextConfigLocation /param-name param-valueclasspath:springmvc.xml/param-value /init-paramload-on-startup1/load-on-startup/servlet!--访问DispatcherServlet对应的路径--servlet-mapping servlet-namespringMVC/servlet-name url-pattern//url-pattern !- -/Do不过滤jsp以防止无限循环--/servlet-mapping!--set thymeleaf --servlet-mapping servlet-namespringMVC/servlet -name url-pattern *.html/url-pattern/servlet-mapping
4.配置web.xml文件中thymeleaf部分
package com . test.action;导入org.springframework.stereotype.Controller;导入org.springframework.ui.Model;导入org.springframework.web.bind.annotation。 RequestMapping;@Controller@RequestMapping('thymeleaf') public class ThymeleafAction { @RequestMapping('/testThymeleaf') public String testThymeleaf(Model model) { model.addAttribute('uname','zhangsan') return 'testThymeleaf';//WEB-INF/views/testThymeleaf.html }}
5.创建控制器
根据前面配置的前缀
在web-inf/views/文件夹中创建一个html 文件。
要访问传递的数据,请注意Thymeleaf 命名空间声明。
!DOCTYPE htmlhtml lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:th='http://www.thymeleaf.org' 头元字符集='UTF-8' titleTitle/title/headbodyh1 th:text='${uname 'aaaa/h1/body/html
6.创建html页面
http://localhost:8080/testssm/thymeleaf/testThymeleaf
成功
7.测试
张三
Thymeleaf 基本上具备了html的所有属性,常用的属性大概有七八个。第一个属性的执行优先级范围是1 到8。数字越低,优先级越高。
1. th:text:设置当前元素的文本内容。相同的功能是th:utext。两者的区别在于前者不会转义HTML标签。优先级不高:order=7
2. th:value:设置当前元素的值。与指定属性更改类似的还有th:src 和th:href。优先级不高:order=6
3. th:each:遍历循环元素。与th:text 或th:value 一起使用。请注意此属性修改的标签的位置。稍后会详细介绍。高优先级:order=2
4、th:if:条件判断类似th:unless、th:switch、th:case。高优先级:order=3
5. th:insert:引入代码块。与th:replace 类似,th:include。如果使用不当,这三个差异可能会破坏HTML 结构。常用于提取公共代码块的场景。最高优先级:order=1
6. th:fragment:定义代码块,方便th:insert引用。最低优先级:order=8
7. th:object:声明变量。通常与*{}一起使用,以达到延迟的效果。普通优先级:order=4
8. th:attr:更改任何属性。还有许多其他有用的th 属性,例如th:attrapend 和th:attrprepend,在实际开发中很少使用。普通优先级:order=5
四.常用th属性解读
五.基础使用语法
从上面我们也知道需要将其添加到HTML中。
html xmlns:th='http://www.thymeleaf.org' 这允许正确使用以下th:* 格式标签。
1.创建HTML
通过**${…}获取值。这与ONGL表达式语法一致。 **
h1 th:text='${uname}'/h1input type='text' th:value='${uname}' /选择变量表达式*{…}
div th:object='${items}' p th:text='*{name}' 产品名称/p p th:text='*{detail}' 产品名称/p/div
p的原始值只有在前端开发时才可见。这样,前端和后端就有了很好的分离。
这也是Thymeleaf 的一个非常好的功能。它也可以在没有网络的情况下运行。这意味着前端可以先编写页面并模拟数据显示效果,然后后端人员可以使用此模板进行修改。那!
2.获取变量值${…}
是链接src href 中使用的语法。类似的标签有:th:href 和th:src。
3.链接表达式: @{…}
无参数:@{/xxx}
参数:@{/xxx(k1=v1,k2=v2)} 对应URL结构:xxx?k1=v1k2=v2
引入本地资源:@{/项目本地资源路径}
引入外部资源:@{/webjars/jar包中资源的路径}
枚举:第3 部分中的实际参考详细使用了该表达式。
link th:href='@{/webjars/bootstrap/4.0.0/css/bootstrap.css}' rel='stylesheet'link th:href='@{/main/css/itdragon.css}' rel='stylesheet' 表单类='form-login' th:action='@{/user/login}' th:method='post' a class='btn btn-sm' th:href='@{/login.html(l='zh_CN')}' 中国英语/aa class='btn btn-sm' th:href='@{/login.html(l='en_US')}'英语/aa href='details.html' th:href='@{/thymeleaf/showItemsById(id=${items.id})}'view/a
链接表达式结构
变量表达式具有丰富的内置方法,使其更加强大和方便。
4.${…}变量表达式
1.可以获取对象属性和方法
2. 您可以使用ctx、vars、locale、request、response、session 和servletContext 内置对象。
3. 可以对日期、数字、字符串、对象、数组、列表、集合、地图等使用内置方法(强调已添加)
变量表达式功能
1. ctx:上下文对象。
2. vars:上下文变量。
3. Locale:上下文的区域设置。
4. 请求:(仅限Web 上下文)HttpServletRequest 对象。
5. 响应:(仅限Web 上下文)HttpServletResponse 对象。
6. Session:HttpSession 对象(仅在Web 上下文中)。
7. servletContext:ServletContext对象(仅在Web上下文中)
这里我们以一个常用的session为例。当用户成功发布时,Thymeleaf 通过内置对象从会话中检索值。
//Java代码将用户名放入会话中session.setAttribute('userinfo',username); //Thymeleaf 通过内置对象直接获取th:text='${session.userinfo}' 1. String: String format 包含所有常用的Java 方法。示例:equals、equalsIgnoreCase、length、trim、toUpperCase、toLowerCase、indexOf、substring、replace、startsWith、endsWith、contains、containsIgnoreCase 等。
2、数字:常用的数字格式化方法:formatDecimal等。
3. bools:布尔方法。常用的方法有: isTrue、isFalse 等
4、数组:常用的方法有toArray、length、isEmpty、contains、containsAll。
5.列表、集合:集合方法。常用的方法有:toList、size、isEmpty、contains、containsAll、sort等。
6.Maps:常用的方法有size、isEmpty、containsKey、containsValue等。
7、日期:常用的方法有format、年、月、时、createNow。
文章底部提供了相应官方网站的链接。
!DOCTYPE htmlhtml lang='ja' xmlns:th='http://www.thymeleaf.org'head meta charset='UTF-8' titleITDragon Thymeleaf 内置方法/title/headbody h2ITDragon Thymeleaf 内置方法/h2 h3#strings /h3 div th:if='$ {not #strings.isEmpty(itdragonStr)}' pOld Str : span th:text='${itdragonStr}'//p ptoUpperCase : span th:text='${#strings.toUpperCase(itdragonStr)}'//p ptoLowerCase : span th:text='${#strings.toLowerCase(itdragonStr)}'//p pequals : span th:text='${#strings.equals(itdragonStr, 'itdragonblog')}'//p pequalsIgnoreCase : span th:text=' ${#strings .equalsIgnoreCase(itdragonStr, 'itdragonblog')}'//p pindexOf : span th:text='${#strings.indexOf(itdragonStr, 'r')}'//p psubstring : span th:text='${ #strings.substring (itdragonStr, 2, 8)}'//p preplace : span th:text='${#strings.replace(itdragonStr, 'it', 'IT')}'//p pstartsWith : scan th:text=' ${#strings .startsWith(itdragonStr, 'it')}'//p pcontains : span th:text='${#strings.contains(itdragonStr, 'IT')}'//p /div h3#numbers /h3 div pformatDecimal 整数部分是可选的。保留两位小数并舍入: span th:text='${#numbers.formatDecimal(itdragonNum, 0, 2)}'//pformatDecimal 整数部分保存5位和2位。小数点后位数,四舍五入: scan th:text='${#numbers.formatDecimal(itdragonNum, 5, 2)}'//p /div h3#bools /h3 div th:if='${#bools.isTrue( itdragonBool) }' p th:text='${itdragonBool}' /p /div h3#arrays /h3 div th:if='${not #arrays.isEmpty(itdragonArray)}' plength : span th:text='${#arrays.length (itdragonArray ) )}'//p pcontains : span th:text='${#arrays.contains(itdragonArray, 5)}'//p pcontainsAll : span th:text='${#arrays.containsAll(itdragonArray, itdragonArray)}' //p/div
<h3>#lists </h3> <div th:if="${not #lists.isEmpty(itdragonList)}"> <p>size : <span th:text="${#lists.size(itdragonList)}"/></p> <p>contains : <span th:text="${#lists.contains(itdragonList, 0)}"/></p> <p>sort : <span th:text="${#lists.sort(itdragonList)}"/></p> </div> <h3>#maps </h3> <div th:if="${not #maps.isEmpty(itdragonMap)}"> <p>size : <span th:text="${#maps.size(itdragonMap)}"/></p> <p>containsKey : <span th:text="${#maps.containsKey(itdragonMap, 'thName')}"/></p> <p>containsValue : <span th:text="${#maps.containsValue(itdragonMap, '#maps')}"/></p> </div> <h3>#dates </h3> <div> <p>format : <span th:text="${#dates.format(itdragonDate)}"/></p> <p>custom format : <span th:text="${#dates.format(itdragonDate, 'yyyy-MM-dd HH:mm:ss')}"/></p> <p>day : <span th:text="${#dates.day(itdragonDate)}"/></p> <p>month : <span th:text="${#dates.month(itdragonDate)}"/></p> <p>monthName : <span th:text="${#dates.monthName(itdragonDate)}"/></p> <p>year : <span th:text="${#dates.year(itdragonDate)}"/></p> <p>dayOfWeekName : <span th:text="${#dates.dayOfWeekName(itdragonDate)}"/></p> <p>hour : <span th:text="${#dates.hour(itdragonDate)}"/></p> <p>minute : <span th:text="${#dates.minute(itdragonDate)}"/></p> <p>second : <span th:text="${#dates.second(itdragonDate)}"/></p> <p>createNow : <span th:text="${#dates.createNow()}"/></p> </div></body></html>后台给负责给变量赋值,和跳转页面。 @RequestMapping("varexpressions")public String varexpressions(ModelMap map) { map.put("itdragonStr", "itdragonBlog"); map.put("itdragonBool", true); map.put("itdragonArray", new Integer[]{1,2,3,4}); map.put("itdragonList", Arrays.asList(1,3,2,4,0)); Map itdragonMap = new HashMap(); itdragonMap.put("thName", "${#...}"); itdragonMap.put("desc", "变量表达式内置方法"); map.put("itdragonMap", itdragonMap); map.put("itdragonDate", new Date()); map.put("itdragonNum", 888.888D); return "grammar/varexpressions";}