浅谈thymeleaf的基本使用

浅谈thymeleaf的基本使用

最近看了一些很多关于Java的技术视频和其它的博客,其中里面都会讲解到thymeleaf和freemaker,其实就是一种Java模板引擎,正好最近我做的这个功能里面,我就使用了它,感觉用起来还是蛮方便的,下面直接看它的基础语法和使用吧!
首先要想使用Thymeleaf的话,必须得加入依赖坐标,因为它很好的支持了html的语法格式,所以它对html语法的格式要求很严格,我看其它的一些文章上面都说到了这个问题,任何的标签都得有结束标记,否则使用它就会很容易报错,这就导致了一些前端人员不是很喜爱它,但实际上也可以解决这种问题,不需要太多关注html的语法格式,也可以随心所欲的使用thymeleaf,这里就需要加上它的另一个依赖坐标,导入下面两个依赖坐标以后,就可以在前端页面随心所欲的使用thymeleaf。

       <!--导入thymeleaf的依赖坐标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!--允许不严格的html5格式出现-->
        <dependency>
            <groupId>net.sourceforge.nekohtml</groupId>
            <artifactId>nekohtml</artifactId>
            <version>1.9.22</version>
        </dependency>

然后你需要在你的控制器里面,使用Model对象作为参数,它的作用就是将你想要的一些数据通过键值对的形式去传递到页面,因为这里返回的是页面,所以需要注意的点是不能使用RestController注解,同理在你的方法上也不能使用ResponseBody注解,否则就是恒不跳转。当然你也可以使用ModelAndView对象来进行页面的一个跳转,亲测有效。当然最重要的就是写url路径的时候,不要再最前面加上/。如果你的html是直接放在resource下面的templates目录下,直接像下面这样写即可,如果你的静态资源文件是放在webapp下面的话,可以在你的yml配置文件里面配上你的资源访问路径即可(注意也不需要在url路径前加上/)
如果你的静态资源是这样的话:
浅谈thymeleaf的基本使用_第1张图片
控制器就可以直接这样写

package cn.itheima.controller;

import cn.itheima.pojo.Users;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.*;

@Controller
public class ShowController {
     
    @RequestMapping("/show")
    public String show(Model model) {
     
        model.addAttribute("msg","Thymeleaf测试");
        model.addAttribute("key",new Date());
        return "indxe.html";
    }
}

在页面中获取它就变得十分简单,有点像以前Java web中使用jstl和el的写法,只不过它变得更加简单了,它是使用th:的形式来做到获取后台传过来的数据的,同时它很好的支持了html的语法格式,所以原本html的一些属性,现在只需要在原先的属性前加上th:,然后使用${}的形式去获取到对应的值。

<span th:text="${msg}"></span>

如果你的结构目录是这样的话:
浅谈thymeleaf的基本使用_第2张图片
只需要在yml文件里面配置你的prefix路径即可

spring:
	thymeleaf:
   		prefix: classpath:/META-INF/resources/
    	mode: LEGACYHTML5
    	cache: false
	    content-type: text/html

上面是它最简单的用法,如果后端传的是一些list,map等集合对象的话,用法其实也类似,下面是我关于集合对象做的一些测试用例

 @RequestMapping("/show3")
    public String show3(Model model) {
     
        List<Users> list = new ArrayList<>();
        list.add(new Users(1,"张三",16));
        list.add(new Users(2,"李四",17));
        list.add(new Users(3,"王五",18));
        model.addAttribute("list",list);
        return "index3";
    }
    @RequestMapping("/show4")
    public String show4(Model model) {
     
        Map<String,Users> map = new HashMap<>();
        map.put("u1",new Users(1,"张三",16));
        map.put("u2",new Users(2,"李四",17));
        map.put("u3",new Users(3,"王五",18));
        model.addAttribute("map",map);
        return "index4";
    }

前端页面获取的时候语法也是类似的,这里有兴趣的可以去看看thymeleaf的文档,基本都是一个模式

	//list的用法
    <tr th:each="u,var : ${list}">
        <td th:text="${u.userid}"></td>
        <td th:text="${u.username}"></td>
        <td th:text="${u.userage}"></td>
        <td th:text="${var.index}"></td>
        <td th:text="${var.count}"></td>
        <td th:text="${var.size}"></td>
        <td th:text="${var.even}"></td>
        <td th:text="${var.odd}"></td>
        <td th:text="${var.first}"></td>
        <td th:text="${var.last}"></td>
    </tr>
    //map的用法
	<tr th:each="maps : ${map}">
        <td th:each="user : ${maps}" th:text="${user.value.userid}"></td>
        <td th:each="user : ${maps}" th:text="${user.value.username}"></td>
        <td th:each="user : ${maps}" th:text="${user.value.userage}"></td>
    </tr>
    

最后,关于你是否使用thymeleaf或者freemaker亦或者是一些其它更流行的技术比如vue,react等来,我觉得一个是看自己做的项目是否有要求,另一个就是看自己的喜好吧。

你可能感兴趣的:(java,html)