前言:
此刻我们对“spring boot thymeleaf 表单提交”大体比较看重,我们都想要了解一些“spring boot thymeleaf 表单提交”的相关内容。那么小编在网络上搜集了一些关于“spring boot thymeleaf 表单提交””的相关文章,希望看官们能喜欢,各位老铁们一起来了解一下吧!SpringBoot主要支持Thymeleaf、Freemarker、Mustache、Groovy Templates等模板引擎。
SpringBoot更倾向于继承Thymeleaf,因为Thymeleaf语法并不会破坏文档的结构,并且Thymeleaf依然是有效的HTML文档,可以实时预览,Thymeleaf在项目运行时会替换掉对应的值。
因此在SpringBoot开发中如果不使用前后端分离,则通常使用Thymeleaf作为模板引擎。
2.1 Thymeleaf简介
Thymeleaf是一个XML/XHTML/HTML5模板引擎,Thymeleaf提供了一个用于整合Spring MVC的可选模块,在应用开发中,你可以使用Thymeleaf来完全代替JSP,或其他模板引擎,如Velocity、FreeMarker等。Thymeleaf的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可,并且该模板引擎也是SpringBoot官方推荐使用的模板引擎。
2.2 Thymeleaf简易教程
在使用Thymeleaf之前,需要先了解一些基础内容,下面简单列举一下Thymeleaf常用的表达式、标签和函数。
2.2.1 常用表达式
Thymeleaf中的表达式通常用于获取请求参数,请求属性,会话属性和应用属性,以及设置链接等。常用的表达式如下:
表达式
说明
${}
变量表达式
@{}
链接表达式
*{}
选择表达式
2.2.1.1 ${}表达式
Thymeleaf提供了专门获取WebContext中请求参数、请求属性、会话属性和应用属性的表达式,这些表达式和JSP中EL表达式的功能非常相似。
${x}:获取Thymeleaf上下文中的变量x或者请求(HttpServletRequest)范围内的x属性的值等价于request.getAttribute()。${param.x}:返回名为x的请求参数的值,等价于HttpRequest对象的getParameter()或者getParameterValues()。${session.x}:返回会话(HttpSession)范围内的x的属性,等价于session.getAttribute()
获取变量值用“$”符号,Thymeleaf表达式同样支持属性路径的写法,例如${session.abc.xyz}表示访问HttpSession范围内abc属性的getXyz()方法的返回值。
2.2.1.2 @{}表达式
Thymeleaf对URL地址通过@{}语法来完成的。
<a th:href="@{}">Byte学院</a><a th:href="@{/}">相对路径</a><a th:href="@{css/index.css}">链接静态资源</a>2.2.2 常用标签
Thymeleaf还提供了类似JSTL的标签,这些标签可以指定标签ID,替换标签内的文字,读取对象中的成员变量,遍历数组、集合,条件判断等功能,本小节将对常用标签进行示例并讲解。常用标签如下:
标签名称
功能介绍
案例
th:id
替换id
<input th:id="'xxx' + ${collect.id}"/>
th:text
文本替换
<p th:text="${collect.description}">description</p>
th:utext
支持html的文本替换
<p th:utext="${htmlcontent}">content</p>
th:object
替换对象
<div th:object="${session.user}">
th:value
属性赋值
<input th:value = "${user.name}" />
th:with
变量赋值运算
<div th:with="isEvens = ${prodStat.count}%2 == 0"></div>
th:style
设置样式
<div th:style="'display:' + @{(${sitrue} ? 'none' : 'inline-block')} + ''"></div>
th:onclick
点击事件
<td th:onclick = "'getCollect()'"></td>
th:each
循环迭代
<tr th:each = "user:${users}">
th:if
判断条件
<a th:if = "${userId == collect.userId}">
th:unless
和th:if判断相反
<a th:href="@{/login} th:unless=${session.user != null}">Login</a>
th:href
链接地址
<a th:href="@{/login}" th:unless=${session.user != null}>Login</a>
th:switch
多路选择配合th:case使用
<div th:switch="${user.role}">
th:case
th:switch的一个分支
<p th:case = "'admin'">User is an administrator</p>
th:src
图片类地址引入
<img class="img-responsive" alt="App Logo" th:src="@{/img/logo.png}" />
th:action
表单提交的地址
<form action="subscribe.html" th:action="@{/subscribe}">
2.2.3 内置对象
试图页面还有一些常用的工具方法,这些工具方法有Thymeleaf的内置对象负责提供,这些内置对象课通过“#”直接访问。内置对象一般都以“s”结尾,如dates、lists、numbers等。
Thymeleaf的内置对象主要有:
#dates:负责处理日期格式化的内置对象。具体用法可参考 Date、DateFormat 等类。#calendars:类似于#dates,只是功能类似于 java.util.Calendar 类。#numbers:负责数字格式化的内置对象。#strings:负责字符串格式化的内置对象,具体用法可参考 java.lang.String等类。#objects:具体用法可参考 java.lang.Object类。#books:负责处理 boolean 类型的内置对象。#arrays:负责操作数组的内置对象,具体用法可参考 javautil.Arrays 类。#lists:负责操作列表的内置对象,具体用法可参考java.util.List类。#sets:负责操作 Set 的内置对象,具体用法可参考java.util.Set 类。#maps:负责操作 Map 的内置对象,具体用法可参考 java.util.Map 类。#aggregates:负责对集合和数组执行聚集运算的内置对象。#messages:负责处理消息的内置对象。
示例代码如下:
<span th:text="S{#dates.format(publishDate,'yyyy-MM-dd HH:mm:ss')i"></span>
使用内置对象 dates 的 format0方法即可对日期进行格式化,format()方法的第一个参数是日期
对象,第二个参数为日期格式(就像 SimpleDateFormat 一样)。
<span th:text="${#numbers.formatDecimal(price, 0, 2)}"></span>
以上代码表示 price 变量只保留 2 位小数。
<span th:text="${#numbers.formatDecimal(price, 3, 2)}"></span>
以上代码表示 price 变量的整数部分保留 3 位(不够前面补 0),小数部分只保留 2 位。
<span th:text="${#strings.length(str)}"></span>
以上代码表示获取变量 str 的长度。
<span th:text="${#lists.size(datas)}"></span>
以上代码表示使用#ists.size()来获取 datas 集合的长度。
总之,记住一句话:Thymeleaf 模板主要就是在标准 HTML 标签中添加一些 th:*属性,该属性指定的表达式的值将会取代该 HTML 标签的内容。
2.3 SpringBoot集成Thymeleaf
要使用Thymeleaf模板引擎,需要在pom.xml文件中引入如下的依赖(依赖引入之后,记得刷新依赖),具体代码如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>
Thymeleaf提供了一些默认设置,通常这些设置并不是必须的:
#Thymeleaf配置spring: thymeleaf: #模板的模式,支持如HTML5、XML、TEXT、JavaScript等 mode: HTML #字符编码,可以不用配 encoding: UTF-8 #配置模板路径,默认就是templates,可不用配置 prefix: classpath:/templates/ #开发配置为false,避免修改模板时重启服务器 cache: false
这里要注意的是,Thymeleaf模板引擎默认会读取项目下的资源文件夹resource下的templates目录,这个目录是用来存放模板引擎文件的。
需要注意的是,使用Thymeleaf模板,首先要改写<html>标签,并引入命名空间,将该标签的修改为如下形式:
<html xmlns:th=";>2.4 SpringBoot集成JSP
虽然SpringBoot推荐使用Thymeleaf作为模板引擎,但由于早期大量SpringMVC项目都是使用JSP作为视图页面,因此SpringBoot依然提供了JSP的支持。
实际上,真正支持JSP的并不是SpringBoot,而是SpringMVC,因此SpringBoot只要为SpringMVC的Servlet提供自动配置支持,就会支持JSP,所以,SpringBoot在org.springframework.boot.autoconfigure.web.servlet包下,并提供了相关类来支持SpringMVC的自动配置。
整合JSP与整合普通模板引擎的最大区别在于:JSP本质上是一个Servlet,因此需要把JSP视图放在Web目录下,对于Maven项目而言,Web目录就是src/main目录下的webapp目录,该目录与java目录、resource目录并列,这意味着SpringBoot加载JSP视图页面的基本路径就是src/main/webapp/目录,而在application.yml中spring.mvc.view.prefix指定的路径,也是以该路径为基路径的。下面以一个例子演示在SpringBoot中集成JSP。
首先,添加依赖。
<!--添加JSTL依赖--><dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId></dependency><!--Jasper是Tomcat中使用的JSP引擎,SpringBoot默认依赖的Tomcat不包含JSP引擎--><dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId></dependency>
上面第一段粗体字代码添加了 JSTL 依赖库,这是为了在 JSP 视图页面中使用 JSTL 来执行分支、迭代循环、输出表达式等功能。上面第二段粗体字代码添加了 tomcat-embed-jasper 依赖库,它是 Tomncat 内置的 JSP 引擎,由于 spring-boot-starter-web 所依赖的 tomcatembed-core jar 并未包含JSP 引擎,因此必须自行添加 tomcat-embed-jasper 作为 JSP 引擎。
在应用的 src/main /目录下创建 webapp 目录,该目录就是 Spring Boot 加载 JSP 视图页面的基路径,然后在 webapp 目录下创建 WEB-INF目录,本例打算将 JSP 视图页面放在该目录下,因此需要在 application.yml 文件中配置如下代码:
spring: mvc: view: prefix: /WEB-INF/
最后,还需要在开发工具中进行设置,在File菜单中选择Project Structure选项。
如上图所示,点击Moudles选项卡,并点击图中Web选项,并点击图中3处所示“+”号,选择新建的webapp目录,点击OK按钮即可。
至此,已经完成了SpringBoot对JSP的集成,接下来,在webapp目录下新建index.jsp。因为该目录受保护的目录,不能直接访问,需要使用控制器进行跳转。因此还需要新建Controller,代码如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> Hello-SpringBoot </body> </html>
@Controllerpublic class IndexController { @RequestMapping(value = "/") public String index(Model model){ return "index.jsp"; }}
启动服务后,在浏览器中输入即可访问JSP页面。如下图所示:
在开发过程中上述配置已经成功了,项目开发完成后通常需要打包部署,这时就需要将webapp目录编译进项目中,在pom.xml文件中<build></build>标签内还需要加入如下配置。
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> <!-- SpringBoot项目默认推荐使用的前端引擎是thymeleaf 要使用SpringBoot集成jsp,手动指定jsp最后编译的路径 同时SpringBoot集成jsp编译jsp的路径是规定好的:META-INF/resources --> <resources> <resource> <!-- 源文件夹 --> <directory>src/main/webapp</directory> <!-- 指定编译到的路径为 META-INF/resources --> <targetPath>META-INF/resources</targetPath> <!-- 指定源文件夹中的哪些资源需要进行编译 --> <includes> <include>*.*</include> </includes> </resource> </resources> </build>