thymeleaf取model值_SpringBoot集成Thymeleaf,附语法讲解SpringBoot中使⽤Thymeleaf
1. pom依赖
org.springframework.boot            spring-boot-starter-thymeleaf        com.github.theborakompanioni            thymeleaf-extras-shiro            ${thyme
2. 配置项
spring:  ## thymeleaf模板设置  thymeleaf:    prefix: classpath:/templates    suffix: .html    mode: HTML    encoding: utf-8    t-type: text/html    cache: f 3. 创建LoginController控制器,loginPage函数⽤来显⽰登陆页
@Controllerpublic class LoginController {    @GetMapping("/login")    public String loginPage(Model model) {        ProjectProperties properties = SpringApp
4. 创建templates模板⽬录,并创建login.html登录页
⽬录结构
login.html
EasyBoot登录
登录
忘记密码?
登录
当中⽤到了嵌⼊模板common/template.html
EasyBoot后台title
启动项⽬,显⽰如下
页⾯显⽰
Thymeleaf语法
1. th属性常⽤th属性解读
html有的属性,Thymeleaf基本都有,⽽常⽤的属性⼤概有七⼋个。其中th属性执⾏的优先级从1~8,数字越低优先级越⾼。
①th:text :设置当前元素的⽂本内容,相同功能的还有th:utext,两者的区别在于前者不会转义html标签,后者会。优先级不⾼:
order=7
②th:value:设置当前元素的value值,类似修改指定属性的还有th:src,th:href。优先级不⾼:order=6
③th:each:遍历循环元素,和th:text或th:value⼀起使⽤。注意该属性修饰的标签位置,详细往后看。优先级很⾼:order=2
④th:if:条件判断,类似的还有th:unless,th:switch,th:case。优先级较⾼:order=3
⑤th:insert:代码块引⼊,类似的还有th:replace,th:include,三者的区别较⼤,若使⽤不恰当会破坏html结构,常⽤于公共代码
块提取的场景。优先级最⾼:order=1
⑥th:fragment:定义代码块,⽅便被th:insert引⽤。优先级最低:order=8
⑦th:object:声明变量,⼀般和*{}⼀起配合使⽤,达到偷懒的效果。优先级⼀般:order=4
⑧th:attr:修改任意属性,实际开发中⽤的较少,因为有丰富的其他th属性帮忙,类似的还有th:attrappend,th:attrprepend。优先
级⼀般:order=5常⽤th属性使⽤
使⽤Thymeleaf属性需要注意点以下五点:
①若要使⽤Thymeleaf语法,⾸先要声明名称空间: xmlns:th=""
②设置⽂本内容 th:text,设置input的值 th:value,循环输出 th:each,条件判断 th:if,插⼊代码块 th:insert,定义代码块
th:fragment,声明变量 th:object
③th:each 的⽤法需要格外注意,打个⽐⽅:如果你要循环⼀个div中的p标签,则th:each属性必须放在p标签上。若你将th:each属性
放在div上,则循环的是将整个div。
④变量表达式中提供了很多的内置⽅法,该内置⽅法是⽤#开头,请不要与#{}消息表达式弄混。
⑤th:insert,th:replace,th:include 三种插⼊代码块的效果相似,但区别很⼤。参考login.html
2. 标准表达式语法
~{...}:代码块表达式
{...}:消息表达式
@{...}:链接表达式
*{...}:选择变量表达式
${...}:变量表达式变量表达式使⽤频率最⾼,其功能也是⾮常的丰富。所以我们先从简单的代码块表达式开始,然后是消息表达式,再是链接表达式,最后是变量表达式,随带介绍选择变量表达式
~{...} 代码块表达式
⽀持两种语法结构
推荐:~{templatename::fragmentname}
⽀持:~{templatename::#id}
templatename:模版名,Thymeleaf会根据模版名解析完整路径:/resources/templates/templatename.html,要注意⽂件的路径。fragmentname:⽚段名,Thymeleaf通过th:fragment声明定义代码块,即:th:fragment="fragmentname"springboot结构
id:HTML的id选择器,使⽤时要在前⾯加上#号,不⽀持class选择器,⽀持标签选择。代码块表达式的使⽤
代码块表达式需要配合th属性(th:insert,th:replace,th:include)⼀起使⽤。
th:insert:将代码块⽚段整个插⼊到使⽤了th:insert的HTML标签中,
th:replace:将代码块⽚段整个替换使⽤了th:replace的HTML标签中,
th:include:将代码块⽚段包含的内容插⼊到使⽤了th:include的HTML标签中
参考login.html、template.html
......
#{...} 消息表达式
消息表达式⼀般⽤于国际化的场景。结构:th:text="#{msg}" 。@{...} 链接表达式
不管是静态资源的引⽤,form表单的请求,凡是链接都可以⽤@{...} 。这样可以动态获取项⽬路径,即便项⽬名变了,依然可以正常访问
链接表达式结构:
⽆参:@{/xxx}
有参:@{/xxx(k1=v1,k2=v2)} 对应url结构:xxx?k1=v1&k2=v2
引⼊本地资源:@{/项⽬本地的资源路径}
引⼊外部资源:@{/webjars/资源在jar包中的路径}
中⽂English
${...}变量表达式
变量表达式有丰富的内置⽅法,使其更强⼤,更⽅便。
变量表达式功能
①可以获取对象的属性和⽅法
②可以使⽤ctx,vars,locale,request,response,session,servletContext内置对象
③可以使⽤dates,numbers,strings,objects,arrays,lists,sets,maps等内置⽅法(重点介绍)
常⽤的内置对象
①ctx :上下⽂对象。
②vars :上下⽂变量。
③locale:上下⽂的语⾔环境。
④request:(仅在web上下⽂)的 HttpServletRequest 对象。
⑤response:(仅在web上下⽂)的 HttpServletResponse 对象。
⑥session:(仅在web上下⽂)的 HttpSession 对象。
⑦servletContext:(仅在web上下⽂)的 ServletContext 对象
这⾥以常⽤的Session举例,⽤户刊登成功后,会把⽤户信息放在Session中,Thymeleaf通过内置对象将值从session中获取。
// java 代码将⽤户名放在session中session.setAttribute("userinfo",username);// Thymeleaf通过内置对象直接获取th:text="${session.userinfo}"
常⽤的内置⽅法
①strings:字符串格式化⽅法,常⽤的Java⽅法它都有。⽐如:
equals,equalsIgnoreCase,length,trim,toUpperCase,toLowerCase,indexOf,substring,replace,startsWith,endsWith,con 等
②numbers:数值格式化⽅法,常⽤的⽅法有:formatDecimal等
③bools:布尔⽅法,常⽤的⽅法有:isTrue,isFalse等
④arrays:数组⽅法,常⽤的⽅法有:toArray,length,isEmpty,contains,containsAll等
⑤lists,sets:集合⽅法,常⽤的⽅法有:toList,size,isEmpty,contains,containsAll,sort等
⑥maps:对象⽅法,常⽤的⽅法有:size,isEmpty,containsKey,containsValue等
⑦dates:⽇期⽅法,常⽤的⽅法有:format,year,month,hour,createNow等
总结
1 . Thymeleaf 是Spring Boot 官⽅推荐的Java模版引擎框架,其⽂件扩展名为.html
2. Thymeleaf ⼏乎⽀持所有的html属性,⽤于赋值的th:text和th:value,⽤于循环遍历的th:each,⽤于条件判断的th:if
3. Thymeleaf 提供四种标准的表达式,有丰富内置⽅法的${},⽤于国际化的#{},⽤于代码插⼊的~{},⽤于处理链接的@{}
4. ⼀定要注意循环遍历的th:each和代码插⼊的th:insert⽤法,尽量避免破坏html结构的细节问题

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。