美文网首页
thymeleaf笔记

thymeleaf笔记

作者: 绿水梧桐 | 来源:发表于2019-08-05 14:33 被阅读0次

    1.thymeleaf特点:是通过特定语法对html的标记做渲染。

    thymeleaf要求html的标记按照严谨的语言去编写,即有开始就要有结束。

    2.在springboot项目中使用方法:

    1.1 导入thymeleaf的依赖包:

    <dependency>

                <groupId>org.springframework.boot</groupId>

                <artifactId>spring-boot-starter-thymeleaf</artifactId>

    </dependency>

    1.2 控制层:

    model.addAttribute("msg","thymeleaf Test");

    return "index";此处的index不是jsp,是html页面。

    1.3 新建html页面:

    th是thymeleaf的前缀,其中:(写在html的标签里面)

    th:text=""是向页面当中输出一些信息;

    th:text="${msg}"是将控制层通过model对象传递到视图层的数据输出到界面中。

    注意:解决报错:org.xml.sax.SAParseEXception,HTML标签有开始标签没有结束标签的问题;

    解决方法:

    1.方法一:给报错的标签加一个结束标签。

    2,方法二:修改thymeleaf的jar的版本在3.0以上,thymeleaf-layout-dialect的版本在2.0以上。

    <properties>

    <thymeleaf.version>3.0.2.RELEASE</thymeleaf.version>

    <thymeleaf-layout-dialect.version>2.0.4</thymeleaf-layout-dialect.version>

    </properties>

    修改版本后,thymeleaf对html的标签就没有那么严谨的要求了。

    (实践发现2.1.6版本的thymeleaf并没有报错)

    1.4 <html xmlns:th="http://www.thymeleaf.org"></html>在html标签中添加这个描述。

    3.thymeleaf语言详解:

    3.1变量输出与字符串操作:(=后面的值要用双引号"",否则报错)

    th:text="${变量}",变量输出,作用:在页面中输出值。

    th:value="${变量}",可以将一个值放到input标签的value中。

    Thymeleaf内置对象,主要语法:

    1.调用内置对象一定要用#

    2.大部分的内置对象都以s结尾:如strings、numbers、dates

    th:text="${#strings.isEmpty(key)}":判断字符串是否为空,如果为空返回true,否则返回false。

    th:text="${#strings.contains(key,'判断的标准')}":判断的标准严格遵循大小写,如果包含返回true,否则返回false。如:${#strings.contains(msg,'T')}

    th:text="${#strings.startswith(key,'判断的标准')}":判断当前字符串是否以子串开头,如果是返回true,否则返回false。

    th:text="${#strings.endswith(key,'判断的标准')}":判断当前字符串是否以指定的子串结尾,如果是返回true,否则返回fasle。

    th:text="${#strings.length(key)}":返回字符串的长度。

    th:text="${#strings.indexof(key,'要找的子串')}":返回子串在字符串当中的索引位置下标,如果没找到返回-1。

    th:text="${#strings.substring(key,从哪个索引开始)}":返回从指定的索引开始截取到最后的子串。

    th:text="${#strings.substring(key,从哪个索引开始,到哪个索引结束)}":返回从指定的索引开始位置截取到指定的结束位置的子串,截取是包含开始不包含结束。

    th:text="${#strings.toUpperCase(key)}":返回转为大写的key。

    th:text="${#strings.toLowerCase(key)}":返回转为小写的key。

    3.2日期格式化处理:

    th:text="${#dates.format(key)}":格式化日期,但不指定格式化格式时默认以浏览器默认语言为格式化标准。

    th:text="${#dates.format(key,'yyyy/MM/dd')}":按照指定的格式做日期转换。

    th:text="${#dates.year(key)}":取年

    th:text="${#dates.month(key)}":取月

    th:text="${#dates.day(key)}":取日

    3.3条件判断

    th:if="${sex} == '男'":sex是model传到视图层的变量,双引号里面写判断条件。

    举例:

    <span th:if="${sex} == '男'">性别:男</span>

    <span th:if="${sex} == '女'">性别:女</span>

    th:switch="${id}":switch的条件应用,id是从model传过来的变量。

    举例:

    <div th:switch="${id}">

    <span th:case="1">ID为1</span>

    <span th:case="2">ID为2</span>

    <span th:case="3">ID为3</span>

    </div>

    3.4迭代遍历

    3.4.1 th:each迭代list

    举例:u是存储每次循环list中对应一个对象,list是model传送过来的变量即用来遍历的对象。

    <tr th:each="u : ${list}">

    <td th:text="${u.userid}"></td>

    <td th:text="${u.username}"></td>

    <td th:text="${u.password}"></td>

    </tr>

    3.4.2 th:each的状态变量:

    举例:

    <tr th:each="u,var : ${list}">

    <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>

    其中var是状态变量。

    index:当前迭代器的索引,从0开始;

    count:当前迭代对象的计数,从1开始;

    size:被迭代对象的长度,即此处的list长度;

    even/odd:布尔值,当前循环是否是偶数/奇数,从0开始;

    first:布尔值,当期循环的是否是第一条,如果是返回true,否则返回false;

    last:布尔值,当前循环的是否是最后一条,如果是返回true,否则返回false;

    3.4.3 th:each迭代map:

    控制层:

    @RequestMapping("/show")

    public String show(Model model){

    Map<String,Users> map=new hashMap<>();

    map.put("u1",new Users(1,"张三",20));

    map.put("u2",new Users(2,"李四",22));

    map.put("u3",new Users(3,"王五",24));

    model.addAtrribute("map",map);

    return "index";  //index是html页面

    }

    视图层(仅记载重要的部分,取map的key,value,对象属性):

    <tr th:each="maps : ${map}">

    <td th:text="${entry.key}"></td>  //key取出来是u1,u2,u3

    <td th:text="${entry.value}"></td> //Value取出来的并不直接是Users的属性,而是Users对象信息

                    <td th:text="${entry.value.userid}"></td>

    <td th:text="${entry.value.username}"></td>

    <td th:text="${entry.value.password}"></td>

    </tr>

    3.5域对象操作

    3.5.1 HttpServletRequest:从request中取对象

    3.5.2 HttpSession:从session中取对象

    3.5.3 ServletContext:从application中取对象

    举例:

    控制层:

    @RequestMapping("/show")

    public String show(HttpServletRequest request,Model model){

    request.setAttribute("req","HttpServletRequest");   

    request.getSession.setAttribute("sess","HttpSession");

    request.getSession.getServletContext().setAttribute("app","Application");

    return "index";  //index是html页面

    }

    视图层:

    Request:<span th:text="${#httpServletRequest.getAttribute('req')}"></span>

    Session:<span th:text="${session.sess}"></span>

    Application:<span th:text="${application.app}"></span>

    3.6 URL表达式

    th:href

    th:src

    3.6.1 url表达式语法:

    基本语法:@{},即被th标识的href,其双引号里面的url要先用@{}括起来。

    3.6.2 URL类型

    1.绝对路径:

    举例:

    <a th:href="@{http://www.sbaidu.com}">绝对路径</a>,该写法等价于<a href="http://www.baidu.com">绝对路径</a>

    2.相对路径:

    1)相对于当前项目的根:即相对于项目的上下文的相对路径

    <a th:href="@{/show}">相对路径</a>,其中的/show即相对于当前项目根路径下的一个叫show的RequestMapping的controller的路径。

    2)相对于服务器路径的根:例如一个tomcat中有多个项目。

    <a th:href="@{~/项目名称/要访问的某个资源名称}">相对于服务器的根</a>,其中~不能掉,表示服务器下。

    3.6.3在url中实现参数传递

    <a th:href="@{/show(id=1)}">相对路径传参</a>,其中(id=1),表示在url中传递一个key为id,value为1的参数,可以看到访问时路径后边添加了?id=1。

    <a th:href="@{/show(id=1,name=zhangsan)}">相对路径传递多个参数</a>,其中要通过url传递多个参数,只需要用逗号“,”隔开即可。

    3.6.4在url中通过restful风格进行参数传递

    <a th:href="@{/path/{id}/show(id=1,name=zhangsan)}">相对路径restful传参</a>,其中正常写路径,在需要传参的位置使用大括号{},里面写上参数名即可。

    相关文章

      网友评论

          本文标题:thymeleaf笔记

          本文链接:https://www.haomeiwen.com/subject/ejlmdctx.html