一、概念

1、Thymeleaf是Web和独立环境的开源的Java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至纯文本;
2、Thymeleaf可以在Web(基于Servlet)和非Web环境中工作,它更适合在基于MVC的Web应用程序的视图层提供XHTML / HTML5 ,但它甚至可以在脱机环境中处理任何XML文件。它提供完整的Spring Framework集成
3、在Web应用程序中,Thymeleaf旨在成为JSP的完全替代品,并实现自然模板的概念:模板文件,可以直接在浏览器中打开,仍然可以正确显示为网页;

二、环境配置

1、如果用maven需要下载thymeleaf-2.1.4.RELEASE.jar(http://www.thymeleaf.org/download.html ),然后在pom里添加依赖
2、整合spring的需要下载thymeleaf-spring4-2.1.4.RELEASE.jar(http://www.thymeleaf.org/download.html ),然后添加依赖
3、servlet配置

<!-- Scans the classpath of this application for @Components to deploy as beans -->
<context:component-scan base-package="com.test.thymeleaf.controller" /> <!-- Configures the @Controller programming model -->
<mvc:annotation-driven /> <!--Resolves view names to protected .jsp resources within the /WEB-INF/views directory -->
<!--springMVC+jsp的跳转页面配置-->
<!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
<!--<property name="prefix" value="/WEB-INF/views/" />-->
<!--<property name="suffix" value=".jsp" />-->
<!--</bean>--> <!--springMVC+thymeleaf的跳转页面配置-->
<bean id="templateResolver"
class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".html" />
<property name="templateMode" value="HTML5" />
</bean> <bean id="templateEngine"
class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver" />
</bean> <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="templateEngine" ref="templateEngine" />
</bean>

4、html
引用命名空间: <html xmlns:th="http://www.thymeleaf.org">
可避免编辑器出现html验证错误,但是不加对Thymeleaf的功能也没有影响;

三、语法

1、表达式

    ${name}        可用值表达式,变量取值(变量名name又后台传入);
*{name} 所有可用值表达式,从可用值中查找name,如果有上下文,比如上层(即父标签)是object,则查object中的name属性(th:object="")。
#{nmae} 消息表达式,国际化时使用,也可以使用内置的对象,比如date格式化数据;(消息通常指:外部文本抽取模板代码片段到模板文件外面, 使外部文本可以存在另一个文件中)
@{name} 链接表达式,用来配合link,src,href使用的
~{name} 片段表达式,用来引入公共部分代码片段,并进行传值操作使用;

示例:
    服务器变量 map.put("msgutext","<b>1111</b>");
    html内容:

    <div th:utext="${msgutext}"></div>        显示结果为粗体的1111
<div th:text="${msgutext}"></div> 显示结果为:<b>1111</b>

2、运算符

数学:+,-,*,/,%
    比较:gt,lt,ge,le,eq,ne
    逻辑:and,or,not,!
    条件:? :  ,?: (默认值,例:    value ?: defaultvalue,条件语句也可以不只要?号,相当于没有else)
    其他:+(字符串连接),_(禁止转义),||(替换,内容可包含非参数内容,如:<a href="" th:href="@{|xx${value}|}"

3、支持的html5操作

(基本所有属性都支持了,只是在前边加了一个th:)
常用th标签

th:id          替换id
th:text 替换标签内文本
th:utext html文本替换,可使文本内的标签生效
th:object 替换对象
th:value 属性赋值
th:with 变量赋值运算,例<div th:with="isEven=${prodStat.count}%2==0"></div>
th:style 替换样式
th:onclick 点击事件
th:each 属性赋值
th:if 条件判断,例:<a th:if="${userId == collect.userId}" >
th:unless 条件判断
th:href 链接地址
th:switch switch选择,和th:case一起使用
th:fragmetn 布局标签
th:include
th:replace
th:selected
th:src
th:inline
th:action
th:remove
th:attr 设置任意标签属性,一般较少用到,因为所有的属性都有对应的th:

一个标签内多个th属性生效的优先顺序:
include,each,if/unless/switch/case,with,attr/attrprepend/attrappend,value/href,src ,etc,text/utext,fragment,remove

4、内嵌数据类型

(内置于Contex中,可通过#直接访问)

dates            java.util.Date的功能方法,${#dates.createNow()}
calendars java.util.Calendar
numbers 数字
strings 字符串
objects objects功能类
bools 布尔值
arrays 数组功能类
lists list功能类
sets 集合功能类
maps 字典功能类 内置基本对象(可通过#访问)
ctx,vars,locale,request,response,session,servletContext

5、遍历

<tr th:each="data:${getdata}">
<td th:text="${data.id}"></td>
<td th:text="${data.name}"></td>
...
</tr>

大部分java集合类型都可以用此来遍历

同时th:each还提供了一个变量可以保存迭代状态
状态包含以下属性:

    index      索引,从0开始
count 计数,从1开始
size   集合内元素总数
current 当前迭代对象
even/odd 奇偶数个,bool类型
first 是否是第一个,bool类型
last 是否是最后一个,bool类型

示例:

 <li th:each="emp, status: ${employees}" th:class="${status.odd} ? 'odd': 'even'">
<span class="list" th:text="${emp.name}"></span>
<span class="list" th:text="${emp.gender == 1} ? '男': '女'"></span>
<span class="list" th:text="${{emp.birthday}}"></span>
<span class="list status" th:text="|index: ${status.index}; count: ${status.count}; size: ${status.size}; first: ${status.first}|"></span> </li>
</li>
<!--如果没有指定第二个参数的名字,有默认的以参数名+Stat为名字,如上没有指定status则可以使用empStat提取上边参数-->

6、条件(if,switch)

示例:

1)if
<tr th:each="test:${test}">
<td th:if="${test.Score} gt 0 and ${test.Score} lt 60">差</td>
<td th:if="${test.Score} ge 60 and ${test.Score} le 70">中</td>
...
</tr>

2)if unless

<tr th:each="test:${test}">
<td th:if="${test.Score} gt 0 and ${test.Score} lt 60">不及格</td>
<td th:unless="${test.Score} gt 0 and ${test.Score} lt 60">及格</td>
</tr>

3)switch

    <tr th:each="test:${test}">
<td th:switch="${test.male}">
<span th:case="1">男</span>
<span th:case="2">女</span>
<span th:case="*">未知</span>
</td>
</tr>

7、其他

1)外围包裹th:block标签:主要用于在代码外部加一层条件,而不用多写一个div

2)日期格式化:

<td th:text="${#dates.format(content.createDate,'yyyy-MM-dd HH:mm:ss')}"></td>

3)字符串长度截取:

<td th:if="${#strings.length(content.title) gt 5 } "  th:text="${#strings.substring(content.title,0,5) + '…'}"></td>

4)下拉选择:

 <select name="subId" id="subId" lay-verify="" >
<option value="">请选择</option>
<option th:each="channelsub:${subchannels}" th:selected="${channelsub.id == subId}" th:value="${channelsub.id}" th:text="${channelsub.name}"></option>
</select>

5)传值到js

 <script th:inline="javascript">
var size= [[${test.size()}]];
</script>

6)传值到css

<style th:inline="css">
.[[${classname}]] {
text-align: [[${align}]];
}
</style>

Thymeleaf(Java模板引擎)的更多相关文章

  1. springboot:Java模板引擎Thymeleaf介绍

    Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎.类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用 ...

  2. 新一代Java模板引擎Thymeleaf

    新一代Java模板引擎Thymeleaf-spring,thymeleaf,springboot,java 相关文章-天码营 https://www.tianmaying.com/tutorial/u ...

  3. jetbrick,新一代 Java 模板引擎,具有高性能和高扩展性

    新一代 Java 模板引擎,具有高性能和高扩展性. <!-- Jetbrick Template Engineer --> <dependency> <groupId&g ...

  4. Java 模板引擎 jetbrick-template

    jetbrick-template 是一个新一代 Java 模板引擎,具有高性能和高扩展性. 适合于动态 HTML 页面输出或者代码生成,可替代 JSP 页面或者 Velocity 等模板. 指令和 ...

  5. Java模板引擎 HTTL

    新一代java模板引擎典范 Beetl http://www.oschina.net/p/httl HTTL(Hyper-Text Template Language)是一个高性能的开源JAVA模板引 ...

  6. httl开源JAVA模板引擎,动态HTML页面输出

    HTTL(Hyper-Text Template Language)是一个适用于HTML输出的开源JAVA模板引擎,适用于动态HTML页面输出,可用于替代JSP页面,它的指令类似于Velocity. ...

  7. 阅读优秀的JAVA模板引擎Beetl的使用说明有感

    由于项目需要,对包括Beetl在内的JAVA模板引擎技术进行了学习 Beetl是由国人李家智(昵称闲大赋)开发的一款高性能JAVA模板引擎,对标产品是Freemaker 感慨于近几年国内开源项目的蓬勃 ...

  8. Beetl学习总结(1)——新一代java模板引擎典范 Beetl入门

    1. 什么是Beetl Beetl目前版本是2.7.0,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点.使得开发和维护模板有很好的体验.是新一代的模板引擎. ...

  9. Java模板引擎性能对比

    模板引擎性能对比 从Github上翻到对JSP.Thymeleaf 3.Velocity 1.7.Freemarker 2.3.23几款主流模板的性能对比,总体上看,Freemarker.Veloci ...

随机推荐

  1. mysql 主从配置(master/slave)

    1.  在每台服务器上创建复制账号(也可以只在master上创建用户,这里配置两个是为了方便以后切换) 备库运行的I/O县城需要建立一个到主库的TCP/IP连接,所以必须在主库创建一个用户,并赋予合适 ...

  2. 关于thinkpad安装win10操作系统

    thinkpad预装的是win8或者win10,会有自己的分区方式是GPT,所以会出现两个引导分区. F2进入tinkpad的bios,F12进入启动选项 我们用pe进入后,用分区工具删除两个分区,然 ...

  3. 20155207 2016-2017-2 《Java程序设计》第七周学习总结

    20155207 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 第13章 时间与日期 13.1 认识时间与日期 13.1.1 时间的度量 格林威治时间(GM ...

  4. 【译】第一篇 Integration Services:SSIS是什么

    本篇文章是Integration Services系列的第一篇,详细内容请参考原文. Integration Services是一种在SQL Server中最受欢迎的子系统.允许你在各种数据源之间提取 ...

  5. PE文件结构及其加载机制

    一.PE文件结构 PE即Portable Executable,是win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格 ...

  6. Django中cookie和session

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  7. linux用户权限 -> 系统基本权限

    比如rwxr-xr-x linux中正是这9个权限位来控制文件属主(User).属组(Group).其他用户(Other)基础权限. 用户对资源来说, 有三种角色 User(u): 属主用户(文件所有 ...

  8. 缓存数据库-redis安装和配置

    一:redis安装 python操作redis分为两部分,一为安装redis程序 二是安装支持python操作redis的模块 1)安装redis redis 官方网站:http://www.redi ...

  9. HTML语义化(2016/3/16更新)

    目录 什么是HTML语义化? 为什么要语义化 常用标签的语义 HTML5新元素 一.什么是HTML语义化? 简单来讲就是:每个标签做自己的事,使得能够被机器直接读懂. 二.为什么要语义化? 1.更容易 ...

  10. mac设置java环境变量, 使用oh-my-zsh

    参考:http://www.mkyong.com/java/how-to-set-java_home-environment-variable-on-mac-os-x/ 如果用bash,修改~/.ba ...