Spring使用Thymeleaf实现HTML界面

简介

​ 本文主要介绍SpringMVC使用Thymeleaf进行简单的HTML界面设计,如Table,表单,下拉框等。

利用Thymeleaf可以非常方便的在HTML中使用Java中class和方法,如字符串,List,Map等。

Thymeleaf

​ Thymeleaf是一个服务器端的Java模板引擎用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS和纯文本,目标是提供一种优雅且易于维护的创建模板的方法。

更多细节见:Thymeleaf文档

为使用Thymeleaf需要有以下几个步骤:

  • 加载Jar依赖
  • 构建Controller
  • 构建HTML文件

Jar依赖

我们使用gradle编译,build.gradle中加入依赖

dependencies {
	//其他依赖
	...
  	compile("org.springframework.boot:spring-boot-starter-thymeleaf:1.4.0.RELEASE")
}

Controller

为Web服务构建Controller,这里有几点需要注意:

  • 注解是@Controller不是@RestController
  • 方法greeting返回是固定字符串"greeting",这里的返回值对应我们将要构建的HTML文件
  • 为展示Thymeleaf可以访问Java中的类,我们构建一个Person类。
  • Model.addAttribute添加属性之后,在HTML文件中可以根据属性名获取其值。
package hello.controller;

import hello.domain.Person;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.HashMap;
import java.util.Map;

/**
 * Created on 2018/9/28.
 *
 * @author Marvin Yang
 */
@Controller
public class PageController {

    @GetMapping("/greeting")
    public String greeting(
            @RequestParam(name="name", required=false, defaultValue="World") String name,
            @RequestParam(name="gender", required=false, defaultValue="male") String gender, 
            Model model) {
        model.addAttribute("name", name);
      	// new person
        Person person = new Person();
        person.setName(name);
        person.setGender(gender);
        model.addAttribute("person", person);
      
        // map
        Map<Integer, String> ages = new HashMap<>();
        ages.put(0, "0-20");
        ages.put(1, "20-40");
        ages.put(2, "40-60");
        ages.put(3, "60-");
        model.addAttribute("ages", ages);
        return "greeting";
    }

}

Person类定义如下:

package hello.domain;

/**
 * Created on 2018/12/26.
 *
 * @author Marvin Yang
 */
public class Person {
    private String name;
    private String gender;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

}

HTML文件

文件位置

​ 为配合Controller我们需要新建HTML文件greeting.html, 文件放置在src/main/resouces/templates/下,文件结构如下图:

src
	|__ main
		|__ java
		|__ resources
			|__ templates
				|__ greeting.html
	|__ test
文件内容

​ 首先做有一个仅包含标题的HTML,并载入xmlns:th="http://www.thymeleaf.org",下面我们利用Controller中为Model设置的属性实现实现Table, 提交表单,下拉框等。

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
  	<!--待加入-->
  	<!--string-->
  	<!--table-->
  	<!--map-->
  	<!--form-->
  	<!--select-->
</body>
</html>
字符串

通过${attributeName}获取Model中的属性值,th:text标示文本,将该段代码放置在HTML对应位置。

<!--string-->
<h2>String</h2>
<p th:text="'Hello, ' + ${name} + '!'" />
table

通过${person.name}获取类的成员变量,前提成员变量是public或者有publicget方法。

<!--table-->
<H2>Table</H2>
<h3 th:text="${person.name} + '\'s INFO'"></h3>
<table border="1">
    <tr>
        <td>Name</td>
        <td>Gender</td>
    </tr>
    <tr>
        <td th:text="${person.name}"></td>
        <td th:text="${person.gender}"></td>
    </tr>
</table>
map

在HTML遍历Map,展示Map的key和value

<!--map-->
<h2>Map</h2>
<table border="1">
    <tr>
        <td>Index</td>
        <td>Range</td>
    </tr>
    <tr th:each="item: ${ages}">
        <td th:text="${item.key}"></td>
        <td th:text="${item.value}"></td>
    </tr>
</table>
提交表单

通过添加namegender两个参数值,提交给controllergreeting方法。

<!--form-->
<h2>Form</h2>
<form action="#" method="get" enctype="application/x-www-form-urlencoded">
    <table>
        <tr>
            <td>Name</td>
            <td>
                <input name="name" type="text" value=""/>
            </td>
            <td>Gender</td>
            <td>
                <input name="gender" type="text" value=""/>
            </td>
            <td>
                <input type="submit" value="提交"/>
            </td>
        </tr>
    </table>
</form>
下拉框

提交表单中gender参数支持下拉框选择。

<!--select-->
<h2>Select</h2>
<form action="#" method="get" enctype="application/x-www-form-urlencoded">
    <table>
        <tr>
            <td>Name</td>
            <td>
                <input name="name" type="text" value=""/>
            </td>
            <td>Gender</td>
            <td>
                <select id="gender" name="gender">
                    <option th:value="male">male</option>
                    <option th:value="female">female</option>
                </select>
            </td>
            <td>
                <input type="submit" value="提交"/>
            </td>
        </tr>
    </table>
</form>

总结

​ 文本主要介绍了使用Thymeleaf进行简单的HTML界面设计,实现了表格,表单,下拉框,并在HTML中访问Java类。本文只是给出一个简单的使用示例,Thymeleaf更强大的功能还需要读者来体验,如HTML中使用if-else, switch, for等。

参考文献

https://spring.io/guides/gs/serving-web-content/

https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个简单的实现步骤: 1. 创建一个基于 Spring Boot 的 web 项目,可以使用 Spring Initializr 来快速生成项目模板。 2. 添加 Thymeleaf 依赖,可以在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> ``` 3. 在 src/main/resources/templates 目录下创建 login.html 文件,作为登录页面模板。 4. 在 src/main/resources/application.properties 文件中添加以下配置: ``` spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html ``` 这样 Spring Boot 就能自动找到 login.html 模板文件。 5. 在 src/main/java 目录下创建一个名为 LoginController 的控制器类,用于处理登录请求。代码如下: ``` @Controller public class LoginController { @GetMapping("/login") public String login() { return "login"; } @PostMapping("/login") public String doLogin(@RequestParam String username, @RequestParam String password, Model model) { if (username.equals("admin") && password.equals("123456")) { model.addAttribute("username", username); return "success"; } else { model.addAttribute("error", "用户名或密码错误"); return "login"; } } } ``` 这里的 login() 方法用于返回登录页面模板,doLogin() 方法用于处理登录请求,判断用户名和密码是否正确,如果正确则跳转到 success.html 页面,否则返回登录页面并显示错误信息。 6. 在 src/main/resources/templates 目录下创建 success.html 文件,作为登录成功后的页面模板。 ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>登录成功</title> </head> <body> <h1>欢迎,[[${username}]]!</h1> </body> </html> ``` 这里使用Thymeleaf 的表达式语法,将登录成功的用户名显示在页面上。 7. 在 src/main/resources/templates 目录下的 login.html 文件中添加以下代码: ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>登录</title> </head> <body> <h1>登录</h1> <form th:action="@{/login}" method="post"> <div> <label for="username">用户名:</label> <input type="text" id="username" name="username" required> </div> <div> <label for="password">密码:</label> <input type="password" id="password" name="password" required> </div> <div> <button type="submit">登录</button> </div> <div th:if="${error}"> <span style="color: red;">[[${error}]]</span> </div> </form> </body> </html> ``` 这里使用Thymeleaf表单绑定语法,将表单数据绑定到 doLogin() 方法的参数中。同时,如果登录失败,会显示错误信息。 8. 运行项目,访问 http://localhost:8080/login 即可看到登录页面。输入正确的用户名和密码,会跳转到登录成功页面。 以上就是一个简单的 Spring Boot 与 Thymeleaf 整合的 webapp,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值