springboot如何使⽤Thymeleaf和⼀些相关操作
⼀、Thymeleaf简介
Thymeleaf模板引擎主要⽤来做视图的展⽰。在springboot中默认⽀持thymeleaf,来替代原来ssm项⽬中的jsp。相较于jsp或其他的模板引擎,thymeleaf有如下特点:
1)动静结合,thymeleaf 既可以在有后台交互的情况下运⾏,也可以在不与后台交互的情况下运⾏,⽅便前后端开发⼈员协同开发;2)多⽅⾔的⽀持,⽀持spring的标准⽅⾔,可以和springboot完美整合;
⼆、Thymeleaf 使⽤
1)在l⽂件中导⼊依赖;
<!-- thymeleaf 模板依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2)在templates ⽬录下新建html页⾯,并加⼊thymeleaf的命名空间即可使⽤,Thymeleaf的命名空间
为:xmlns:th="";
3)引⼊命名空间之后,我们便可以使⽤thymeleaf的语法来展⽰数据;
三、Thymeleaf 的语法
Thyemeleaf的使⽤与jsp中的jstl和el表达式使⽤⽅法相似;
Thymeleaf 表达式:⽤来取值,写在thymeleaf属性标签中。
1) ${} :从域中取值,与el表达式类似;
注意:当对象不存在的情况下,去获取对象的属性的话,会抛出异常;
所以取值的时候,如果可能存在不存在的情况,需在对象后添加?判断对象是否存在;
默认从request域中取值;
常见的内置对象:
1)session: 从session中获取值,类似jsp中的${session} == ${sessionScope}
2)request: httpServletRequest对象,${request} == ${quest.}
3)servletContext: ServletContext对象(application域)
4)ctx : 上下⽂对象
5)vars: 上下⽂变量
6)local: 上下⽂的语⾔环境;
2) *{} :选择变量表达式,需要配合th:object 属性标签⼀起使⽤。th:object可以绑定⼀个对象,*{属性名} 去获取绑定的对象的属性;
3) #{} :获取国际化消息表达式;
4) ~{} :代码块表达式,⽤来加载代码⽚段。需配合 th:replace th:insert th:include 三个属性标签使⽤。类似 <%@include >;
<body>
<!-- insert 插⼊代码⽚段 ,包含最外层的标签 ~{模板名称::代码⽚段名称}
</head><header>
<div>头部导航栏</div>
<ul>
<li>⾸页</li>
<li>⽂章</li>
</ul>
</header></div>
-->
el表达式获取session中的值<div th:insert="~{admin/common::head}">
原来内容
</div>
<table>
<tr>
<td>序号</td>
<td>⽤户名</td>
<td>密码</td>
<td>状态</td>
<td>创建时间</td>
<td>操作</td>
</tr>
<!--
for(: xx)
th:each="遍历出来的单个对象,iterStat(状态对象):要遍历的集合
-->
<tr th:object="${admin}" th:each="admin,iterStat:${adminPageInfo.list}">
<td th:text="${unt}">序号</td>
<td th:text="*{account}">⽤户名</td>
<td th:text="*{password}">密码</td>
<td>
<!-- th:if判断标签是否显⽰ -->
<span th:if="*{status eq '0'}" >正常</span>
<span th:if="*{status eq '1'}" >注销</span>
</td>
<td th:text="*{createtime}">创建时间</td>
<td>
<!-- @{} 中链接地址需要传值的,通过在链接地址后⾯添加(key=value,key2=value2)的形式添加 -->
<a th:href="@{/admin/edit(id=*{id})}">修改</a>
<a th:href="@{/admin/delete(id=*{id})}">删除</a>
</td>
</tr>
</table>
<!-- 替换内容,将引⼊的标签,替换掉现有标签,
标签内容全部过来
<footer>
<div>版权所有,翻版必究</div>
</footer>
-->
<div th:replace="~{admin/common::footerDiv}">
<span>原来内容</span>
</div>
<!-- include 加载代码⽚段,
不包含最外⾯的标签
<div>
<div>版权所有,翻版必究</div>
</div>
-->
<div th:include="~{admin/common::footerDiv}">
<span>原来内容</span>
</div>
</body>
5) @{} :⽤来定义链接url地址。⽐如 img src a href <script > <link>等;
四、Thymeleaf 属性标签
编写在html标签上,替代原有的html标签属性,以达到动态展⽰数据。
Thymelaef属性标签都是以th:开头。⼏乎涵盖了html标签中所有的属性。
常见的标签:
1) th:text :设置当前标签的⽂本内容;
2) th:value : 设置当前元素的value值;
3) th:utext: 设置当前元素的html内容;
4) th:title ;
5) th:if :相当于<c:if> ⽤来做判断,如果表达式为false,则当前标签不显⽰;
6) th:each :相当于<c:foreach> ,⽤来遍历数据;
7) th:object : 声明变量,配合*{} ⼀起使⽤;
8) th:fragment :⽤来定义⼀个代码⽚段,以供th:insert replace include 调⽤;
9) th:insert : 将代码⽚段的所有内容(包含最外层的标签)插⼊到使⽤th:insert的html标签中。 <div th:insert=”~{}”></div>;
10) th:replace : 将代码⽚段替换掉使⽤th:insert的html标签;
11) th:include :将代码⽚段的内容(不包含最外层的标签)插⼊到使⽤th:insert的html标签中;
五、Thymeleaf 函数
Thymeleaf 函数写在表达式中,⽤来对数据进⾏数据格式话,字符串操作,集合操作等
常⽤的函数:
1) #strings: 字符串操作函数,跟java中string的api类似。跟jstl el 表达式中 fn:函数标签类似。
2) #dates :⽤来对⽇期进⾏操作,⽇期的格式化,获取⽇期的年⽉⽇,创建⽇期等
3) #numbers: ⽤来对数值进⾏格式化,保留指定⼩数位,分隔符展⽰等
4) #arrays 数组的操作,获取数组长度,是否包含某个元素等等。。。
5) #maps: map集合操作
6) 。。。
测试代码:
@Controller
public class FunctionController {
@GetMapping("/function")
public String function(ModelMap modelMap){
modelMap.put("name","james");
modelMap.put("birthday",new Date());
modelMap.put("arrayData",new String[]{"james","yao","yi"});
return"function.html";
}
}
function.html界⾯:
<body>
<h1>字符函数</h1>
长度:<span><div th:text="${#strings.length(name)}"></div></span></br>
⾸字母⼤写:<span><div th:text="${#strings.capitalize(name)}"></div></span></br>
contains:<span><div th:text="${#ains(name,'jam')}"></div></span></br>
isEmpty:<span><div th:text="${#strings.isEmpty(name)}"></div></span></br>
substring:<span><div th:text="${#strings.substring(name,0,2)}"></div></span></br>
<h1>⽇期函数</h1>
不格式化:<span th:text="${birthday}"></span><br/>
format 指定格式:<span th:text="${#dates.format(birthday,'yyyy-MM-dd HH:mm:ss')}"></span><br/>
format不指定格式:<span th:text="${#dates.format(birthday)}"></span><br/>
year:<span th:text="${#ar(birthday)}"></span><br/>
month:<span th:text="${#h(birthday)}"></span><br/>
dayOfWeekName:<span th:text="${#dates.dayOfWeekName(birthday)}"></span><br/>
创建⽇期:<span th:text="${#ateToday()}"></span><br/>
<h1>数值函数</h1>
整数的格式化:<span th:text="${#numbers.formatInteger(100,5)}"></span><br/>
<!-- COMMA 逗号 POINT.WHITESPACE 空格-->
整数的格式化带分隔符:<span th:text="${#numbers.formatInteger(100,5,'COMMA')}"></span><br/>
<!-- 前两个参数与整数⼀样,第三个参数为保留的⼩数位,四舍五⼊-->
⼩数的格式化:<span th:text="${#numbers.formatDecimal(100.94876,5,3)}"></span><br/>
<!-- COMMA 逗号 POINT.WHITESPACE 空格-->
⼩数的格式化带分隔符:<span th:text="${#numbers.formatDecimal(100.94876,3,3,'COMMA')}"></span><br/>百分⽐:<span th:text="${#numbers.formatPercent(0.783646,5,3)}"></span><br/>
<h1>数组函数arrays</h1>
数组长度:<span th:text="${#arrays.length(arrayData)}"></span><br/>
是否为空:<span th:text="${#arrays.isEmpty(arrayData)}"></span><br/>
是否包含:<span th:text="${#ains(arrayData,'james')}"></span><br/>
<h1>list集合函数</h1>
<!-- #lists #maps #sets-->
<!--<span th:text="${#ains()}"></span>-->
</body>
测试结果为:
六、Springboot中⽂件上传下载
Springboot中⽂件上传下载与springmvc 完全⼀致。
1)控制层代码:
@Controller
public class FileController {
@GetMapping("/toUpload")
public String toUpload(){
return"upload.html";
}
@PostMapping("/upload")
public String upload(MultipartFile multipartFile, ModelMap modelMap) throws IOException { // if (multipartFile==null){ throw new FileNotFoundException(); }
//获取⽂件名
String filename = OriginalFilename();
// ⽇期时间戳+⽤户ID
//随机⼀个uuid名称
String randName = UUID.randomUUID().toString();
//a.png
String fileType = filename.substring(filename.lastIndexOf("."));
List<String> allowType= Arrays.asList(new String[]{".png",".jpg"});
if (!ains(fileType)){//不允许的⽂件类型
throw new NotAllowFileTypeException(" 001","上传的格式不⽀持:"+fileType);
}
Date date = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
String today=sdf.format(date);
String path="E:/headpic/"+ today;
//创建⽂件对象⽤来指定保存的位置和名称
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论