1. Thymeleaf 属性  99

1.1 解释

大部分属性和 html 的一样,只不过前面加了一个 th 前缀。 加了 th 前缀的属性,是经过

模版引擎处理的。

属性是放在html元素中的,就是html元素的属性,加入了th前缀。  属性的作用不变。    加入上th, 属性的值由模板引擎处理了。  在属性可以使用变量表达式

1.2 例如

<form action="/loginServlet" method="post"></form>

<form th:action="/loginServlet" th:method="${methodAttr}"></form>

2. 模板属性举例   99

2.1 action和method  99

定义后台控制器的路径,类似

标签的 action 属性,主要结合 URL 表达式,获取动态变量

......

 th:method设置请求方法

......

//使用模板的属性   99
    @GetMapping("/property")
    public String useProperty(Model model){
        model.addAttribute("methodAttr","post");
        model.addAttribute("id","2342");

        model.addAttribute("paramname","name");
        model.addAttribute("uservalue","lisi");

        model.addAttribute("textcolor","color:blue");

        return "html-property";
    }

html-property.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>属性  99-100</title>

</head>
<body>
    <div style="margin-left: 400px">
        <h3>属性使用, 在html元素的属性上加入th</h3>
        <form th:action="@{/loginServlet}" th:method="${methodAttr}">
            <input th:type="text" th:name="${paramname}" th:value="${uservalue}"/><br>
            <input type="button" id="btn" th:onclick="btnClick()"value="按钮"/>
        </form>


    </div>
</body>
<script type="text/javascript">
    function btnClick(){
        alert("按钮单击了")
    }
</script>
</html>


Thymeleaf的属性_Thymeleaf属性

2.2 使用jquery  100

html-property.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>属性  99-100</title>
<!--    引入jquery库  100-->
    <script th:src="@{/js/jquery-3.4.1.js}" type="text/javascript"></script>
</head>
<body>
    <div style="margin-left: 400px">
        <h3>属性使用, 在html元素的属性上加入th</h3>
        <form th:action="@{/loginServlet}" th:method="${methodAttr}">
            <input th:type="text" th:name="${paramname}" th:value="${uservalue}"/><br>
            <input type="button" id="btn" th:onclick="btnClick()" value="按钮"/>
        </form>


    </div>
</body>
<script type="text/javascript">

    // 使用jquery  100
    $(function (){
        $("#btn").click(function (){
            alert("111111")
        })
    })

</script>
</html>

Thymeleaf的属性_Thymeleaf属性_02

2.3 设置颜色 100

<p th:style="${textcolor}">这是模板的例子</p>

Thymeleaf的属性_html_03

3. each循环   101

这个属性非常常用,比如从后台传来一个对象集合那么就可以使用此属性遍历输出,它与

JSTL 中的类似,此属性既可以循环遍历集合,也可以循环遍历数组及 Map.

each循环, 可以循环List,Array

语法:

在一个html标签中,使用th:each

集合循环成员,循环的状态变量:两个名称都是自定义的。 “循环的状态变量”这个名称可以不定义,默认是"集合循环成员Stat"

<div th:each="集合循环成员,循环的状态变量:${key}">
    <p th:text="${集合循环成员}" ></p>
</div>

3.1 语法说明: 102

th:each="user, iterStat : ${userlist}"中的 ${userList} 是后台传过来的集合

◼ user

定义变量,去接收遍历${userList}集合中的一个数据

◼ iterStat 

${userList} 循环体的信息

◼ 其中 user 及 iterStat 自己可以随便取名

◼ interStat 是循环体的信息,通过该变量可以获取如下信息

index: 当前迭代对象的 index(从 0 开始计算)

count: 当前迭代对象的个数(从 1 开始计算)这两个用的较多

size: 被迭代对象的大小

current: 当前迭代变量

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

first: 布尔值,当前循环是否是第一个

last: 布尔值,当前循环是否是最后一个

注意:循环体信息 interStat 也可以不定义,则默认采用迭代变量加上 Stat 后缀,即

    userStat

3.2 循环List  101

//循环List   101
    @GetMapping("/eachList")
    public String eachList(Model model){
        List<SysUser> users  = new ArrayList<>();
        users.add( new SysUser(1001,"张三","m",20));
        users.add( new SysUser(1002,"关羽","m",70));
        users.add( new SysUser(1003,"张飞","m",60));
        users.add( new SysUser(1004,"刘备","m",80));
        users.add( new SysUser(1005,"孙尚香","f",50));
        model.addAttribute("myusers",users);
        return "eachList";
    }

eachList.html

<div th:each="user,userIter:${myusers}">
    <p th:text="${user.id}"></p>
    <p th:text="${user.name}"></p>
    <p th:text="${user.sex}"></p>
    <p th:text="${user.age}"></p>
</div>

Thymeleaf的属性_xml_04

3.2.1 放入表格中显示数据  102

eachList.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>each循环   101</title>
</head>
<body>

   <div style="margin-left: 400px">
       <!--<div th:each="user,userIter:${myusers}">
            <p th:text="${user.id}"></p>
            <p th:text="${user.name}"></p>
            <p th:text="${user.sex}"></p>
            <p th:text="${user.age}"></p>
       </div>-->
       <br/>
       <br/>

       <table border="1" width="60%" cellpadding="0" cellspacing="0" >
           <thead>
             <tr>
                 <td> 编号</td>
                 <td> id 序号 </td>
                 <td> name </td>
                 <td> sex </td>
                 <td> age </td>
                 <td>姓名</td>
                 <td>是否是第一行</td>
             </tr>
           </thead>
           <tbody>
             <tr th:each="user:${myusers}">
                 <td th:text="${userStat.count}+'/'+${userStat.size}"></td>
                 <td th:text="${user.id}"></td>
                 <td th:text="${user.name}"></td>
                 <td th:text="${user.sex}"></td>
                 <td th:text="${user.age}"></td>
                 <td th:text="${userStat.current.name}"></td>
                 <td th:text="${userStat.first}"/>
             </tr>
           </tbody>

       </table>
   </div>

</body>
</html>

Thymeleaf的属性_Thymeleaf属性_05

3.3 循环数组 Array  104

th:each 语法同上

//循环数组    104
    @GetMapping("/eachArray")
    public String eachArray(Model model){
        SysUser userarray[] = new SysUser[3];
        userarray[0] = new SysUser(1001,"马超","男",20);
        userarray[1] = new SysUser(1002,"黄忠","男",26);
        userarray[2] = new SysUser(1003,"赵云","男",22);
        model.addAttribute("userarray",userarray);

        return "eachArray";
    }

eachArray.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>each循环数组   104</title>
</head>
<body>

   <div style="margin-left: 400px">
      <div th:each="user:${userarray}">
          <p th:text="${user.id}"></p>
          <p th:text="${user.name}"></p>
          <p th:text="${user.sex}"></p>
          <p th:text="${user.age}"></p>
          <br/>
          <hr/>
      </div>

   </div>

</body>
</html>

Thymeleaf的属性_Thymeleaf属性_06

3.4 循环Map  105-106

在一个html标签中,使用th:each

集合循环成员,循环的状态变量:两个名称都是自定义的。 “循环的状态变量”这个名称可以不定义,默认是"集合循环成员Stat"

key:map集合中的key

value:map集合key对应的value值

<div th:each="集合循环成员,循环的状态变量:${key}">
    <p th:text="${集合循环成员.key}" ></p>
    <p th:text="${集合循环成员.value}" ></p>
</div>

3.4.1 map中存储引用数据类型  105

//循环Map    105
    @GetMapping("/eachMap")
    public String eachMap(Model model){
        Map<String,SysUser> map = new HashMap<>();
        map.put("user1",new SysUser(11001,"马超","男",20));
        map.put("user2",new SysUser(11002,"黄忠","男",26));
        map.put("user3",new SysUser(11003,"赵云","男",22));
        model.addAttribute("mymap",map);
        return "eachMap";
    }

eachMap.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>循环Map  105</title>
</head>
<body>

    <div style="margin-left: 400px">
        <div th:each="map,userStat:${mymap}">
            <p th:text="${map.key}"></p>
            <p th:text="${map.value}"></p>
            <p th:text="${map.value.id}"></p>
            <p th:text="${map.value.name}"></p>
            <p th:text="${userStat.count}"></p>
        </div>
    </div>

</body>
</html>

Thymeleaf的属性_html_07

3.4.2 map中存储基本数类型  106

Map<String,String>  strMap  = new HashMap<>();
        strMap.put("str1","Hello SpringBoot");
        strMap.put("str2","MyBatis MySQL");
        model.addAttribute("strmap",strMap);

eachMap.html

<br/>
<br/>
<div th:each="strmap:${strmap}">
    <p th:text="${strmap.key}"></p>
    <p th:text="${strmap.value}"></p>
</div>

Thymeleaf的属性_html_08

3.4.3 list中存储map  106

//复杂的List<Map>  106
        //将map放入到list
        List<Map<String,SysUser>> listmap  =  new ArrayList<>();
        listmap.add(map);

        Map<String,SysUser> map1 = new HashMap<>();
        map1.put("sanguo1",new SysUser(21001,"典韦","男",22));
        map1.put("sanguo2",new SysUser(21002,"夏侯惇","男",28));
        map1.put("sanguo3",new SysUser(21003,"关胜","男",16));
        listmap.add(map1);

        model.addAttribute("listmap",listmap);

eachMap.html

<h3>循环List《Map》  Map<String,SysUser> lm: listmap.get(0)</h3>
        <div th:each="lm:${listmap}"><!--这层循环是得到list中的map-->
            <!--这层循环是 循环map中的所有key,value-->
            <div th:each="m:${lm}">
                <p th:text="${m.key}"></p>
                <p th:text="${m.value.id}"></p>
                <p th:text="${m.value.name}"></p>
                <p th:text="${m.value.age}"></p>
                <br/>
                <hr/>
            </div>

            <br>
            <hr>

        </div>

这章图片显示不全

Thymeleaf的属性_html_09

4. 条件判断  107

4.1 th:if  107

语法:th:if=”boolean 条件” , 条件为 true 显示体内容

th:if"  : 判断语句, 当条件为true, 显示html标签体内, 反之不显示 没有else语句

重点  " " 空字符是true   null是false

语法:
<div th:if=" 10 > 0 "> 显示文本内容 </div>
@GetMapping("/ifunless")
    public String ifunless(Model model){
        model.addAttribute("sex","m");
        model.addAttribute("isLogin",true);
        model.addAttribute("age",20);
        model.addAttribute("name","");
        model.addAttribute("isOld",null);
        return "ifunless";

    }

ifunless.html

 <div style="margin-left: 400px">
        <h3> if 使用</h3>
        <p th:if="${sex=='m'}">性别是男</p>
        <p th:if="${isLogin}">已经登录系统</p>
        <p th:if="${age > 20}">年龄大于20</p>
        <!--""空字符是true-->
        <p th:if="${name}">name是“”</p>
        <!--null是false-->
        <p th:if="${isOld}"> isOld是null</p>
    </div>

Thymeleaf的属性_xml_10

4.2 th:unless   108

th:unless 是 th:if 的一个相反操作

 当条件为false显示标签体内容

语法:
<div th:unless=" 10 < 0 "> 当条件为false显示标签体内容 </div>
@GetMapping("/ifunless")
    public String ifunless(Model model){
        model.addAttribute("sex","m");
        model.addAttribute("isLogin",true);
        model.addAttribute("age",20);
        model.addAttribute("name","");
        model.addAttribute("isOld",null);
        return "ifunless";

    }

ifunless.html

<!--    unless  108-->
    <br/>
    <br/>
    <div style="margin-left: 400px">
        <h3>unless: 判断条件为false,显示标签体内容</h3>
        <p th:unless="${sex=='f'}">性别是男的</p>
        <p th:unless="${isLogin}">登录系统</p>
        <p th:unless="${isOld}"> isOld是null </p>
    </div>

Thymeleaf的属性_Thymeleaf属性_11

5. switch,case判断语句   109

语法:类似 java 中的 switch,case

一旦某个 case 判断值为 true,剩余的 case 则都当做 false,“*”表示默认的

case,前面的 case 都不匹配时候,执行默认的 case

语法:
<div th:switch="要比对的值">
    <p th:case="值1">
        结果1
    </p>
    <p th:case="值2">
        结果2
    </p>
    <p th:case="*">
        默认结果
    </p>
    以上的case只有一个语句执行
 //switch   109
    @GetMapping("/switch")
    public String doSwitch(Model model){
        model.addAttribute("sex","m");
        return "switch";

    }

switch.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>switch   109</title>
</head>
<body>
    <div style="margin-left: 400px">
        <h3> switch 使用</h3>
        <div th:switch="${sex}">
            <p th:case="f">性别是女</p>
            <p th:case="m">性别是男</p>
            <p th:case="*">未知</p>
        </div>
    </div>

</body>
</html>

Thymeleaf的属性_html_12

6. 内联 th:inline  110

th:inline 有三个取值类型 (text, javascript 和 none)

6.1 内联 text  110

内联text:  在html标签外,获取表达式的值

可以让 Thymeleaf 表达式不依赖于 html 标签,直接使用内敛表达式[[表达式]]即可获取动

态数据,要求在父级标签上加 th:inline = “text”属性

语法

<p>显示姓名是:[[${key}]]</p>
// 内联 text   110
    @GetMapping("/inline")
    public String inline(Model model){
        model.addAttribute("sex","m");
        model.addAttribute("age",20);
        model.addAttribute("name","张三");
        model.addAttribute("myuser" ,new SysUser(1005,"周峰","男",20));

        return "inline";

    }
<div style="margin-left: 400px">
        <h3>内联 text, 使用内联表达式显示变量的值</h3>
        <div th:inline="text">
            <p>我是[[${name}]],年龄是[[${age}]]</p>
            我是<span th:text="${name}"></span>,年龄是<span th:text="${age}"></span>
        </div>

        <div>
            <p>使用内联text</p>
            <p>我是[[${name}]],性别是[[${sex}]]</p>
        </div>
    </div>

里面的th:inline="text"可写可不写

Thymeleaf的属性_List_13

6.2 内联javascript  111

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>内联 inline  110</title>

<!--    javascript中加入th:inline="javascript"说明js中可以使用内联  111-->
    <script type="text/javascript" th:inline="javascript">
         var myname = [[${name}]];
         var myage = [[${age}]];

         //alert("获取的模板中数据 "+ myname + ","+myage)

        function fun(){
            alert("单击事件,获取数据 "+ myname + ","+ [[${sex}]])
        }
    </script>
</head>
<body>
    <div style="margin-left: 400px">
        <h3>内联 text, 使用内联表达式显示变量的值</h3>
        <div th:inline="text">
            <p>我是[[${name}]],年龄是[[${age}]]</p>
            我是<span th:text="${name}"></span>,年龄是<span th:text="${age}"></span>
        </div>

        <div>
            <p>使用内联text</p>
            <p>我是[[${name}]],性别是[[${sex}]]</p>

            <input type="button" name="btn" value="单击获取模板数据" onclick="fun()">

        </div>
    </div>
</body>
</html>

Thymeleaf的属性_xml_14