springBoot之Thymeleaf语法

thymeleaf模版语法和其他模版引擎模版语法蛮相似,都有循环、判断、表达式、日期处理等等

一:访问map中的数据

1

2

3

4

5

6

7

8

9

10

@RequestMapping("/index")

     public String hello(Model map){

          

         //map

         Map<String, Object> student= new HashMap<>();

         student.put("name""张三丰");

         map.addAttribute("student",student);

          

         return "index";

     }

1

2

3

4

5

6

7

8

9

<span th:text="${student.name}"></span>   

字符串拼接:<h2 th:text="'姓名:'+${student.name}"></h2>

三元表达式:<input th:value="${age gt 30 ? '中年':'年轻'}"/>

gt:great than(大于)

ge:great equal(大于等于)

eq:equal(等于)

lt:less than(小于)

le:less equal(小于等于)

ne:not equal(不等于)

记住:th:text就是把数据渲染到两个标签中间 ,其中th是thymeleaf简写。

二:访问pojo中的属性

1

2

3

//pojo

    Book book = new Book("辟邪剑谱",199.99f,"http://img3m6.ddimg.cn/15/16/23326296-1_w_2.jpg");

    map.addAttribute("book",book);

1

2

<img th:src="${book.bookUrl}"/>

<span th:text="${book.bookName}"/>

记住:如果你想让标签属性值动态化,请在标签属性名前面加上th:

三:循环遍历list集合

1

2

3

4

5

6

7

//集合

         List<Book> books = new ArrayList<Book>();

         for (int i = 0; i < 10; i++) {

              Book b = new Book("book"+i, 100f, "http://www.wendaoxueyuan.com/images/"+i+".jpg");

              books.add(b);

         }

         map.addAttribute("books",books);

1

2

3

4

5

6

7

8

9

10

11

<table border="1px" cellspacing="0px" cellspadding="0px" width="100%">

               <tr>

                        <td>编号</td><td>书名</td><td>书价格</td><td>图片地址</td>

               </tr>

               <tr th:each="book:${books}">

                        <td>编号</td>

                        <td th:text="${book.bookName}">书名</td>

                        <td th:text="${book.bookPrice}">书价格</td>

                        <td th:text="${book.bookUrl}">图片地址</td>

               </tr>

 </table>

取循环下标:

1

2

3

4

5

6

7

8

9

10

<tr  th:each="user,userStat : ${list}">  

    <th th:text="${userStat.index}">状态变量:index</th

    <th th:text="${userStat.count}">状态变量:count</th

    <th th:text="${userStat.size}">状态变量:size</th

    <th th:text="${userStat.current.userName}">状态变量:current</th

    <th th:text="${userStat.even}">状态变量:even****</th

     <th th:text="${userStat.odd}">状态变量:odd</th

    <th th:text="${userStat.first}">状态变量:first</th

    <th th:text="${userStat.last}">状态变量:last</th

</tr>

说明:

index:列表状态的序号,从0开始;

count:列表状态的序号,从1开始;

size:列表状态,列表数据条数;

current:列表状态,当前数据对象

even:列表状态,是否为奇数,boolean类型

odd:列表状态,是否为偶数,boolean类型

first:列表状态,是否为第一条,boolean类型

last:列表状态,是否为最后一条,boolean类型

考考你:如果我想奇数行红色,偶数行蓝色怎么实现?不许用javascript。

提示代码:<tr th:class="${pcStatus.even?'red':'blue'}"></tr>   

四:if逻辑判断

1

2

3

4

5

<h1>

    <b th:text="${name}"></b>:

    <span th:if="${age gt 30}">中年</span>

    <span th:unless="${age gt 30}">年轻</span>

</h1>

记住:th:if表示满足条件显示标签,th:unless表示不满足条件显示标签

五:日期处理

1

<span th:text="${#dates.format(post.postCreate,'yyyy-MM-dd')}">2017年11月8日</span>

将Date类型的日期对象转换成指定格式的时间字符串

六:定义片段和引用片段

定义片段:新建footer.html,并在footer.html中声明片段

1

2

3

<footer th:fragment="copy">  

   <script type="text/javascript" th:src="@{/plugins/jquery/jquery-3.0.2.js}"></script>  

</footer>

引用片段:在index.html中引用footer片段:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

  <!--下面的footer是页面的名字,不是标签的名字-->

  <div th:insert="footer::copy"></div>  

   

  <div th:replace="footer::copy"></div>  

   

  <div th:include="footer::copy"></div>  

     

   

结果为:  

   

<div>  

    <footer>  

       <script type="text/javascript" th:src="@{/plugins/jquery/jquery-3.0.2.js}"></script>  

    </footer>    

</div>    

   

   

<footer>  

  <script type="text/javascript" th:src="@{/plugins/jquery/jquery-3.0.2.js}"></script>  

</footer>    

   

   

<div>  

  <script type="text/javascript" th:src="@{/plugins/jquery/jquery-3.0.2.js}"></script>  

</div>

说明:

  • th:insert   :保留自己的主标签,保留th:fragment的主标签。

  • th:replace :不要自己的主标签,保留th:fragment的主标签。

  • th:include :保留自己的主标签,不要th:fragment的主标签。(官方3.0后不推荐)

七:内联方式

如果不内联我们这么拼接字符串

1

<span th:text="'名字'+${stu.name}+'性别'+${stu.sex}+'年龄'+${stu.age}"></span>

使用内联我们就可以这么玩:

1

<span th:inline="text">名字[[${stu.name}]]性别[[${stu.sex}]]年龄[[${stu.age}]]</span>

一对比,发现第一种拼接起来麻烦,第二种更快捷,所以内联还是有使用场景的

注意:一定要加th:inline="text"

<script></script>标签里面不能直接写el表达式,但是很多场景我们必须要写,这个时候就必须使用内联方式

比如:

1

2

3

4

5

<script th:inline="javascript">

    alert([[${stu.name}]])

</script>

八:内置对象

1

2

<span th:if="${session.name!=null}" th:text="'欢迎:'+${session.name}"></span>

<span th:id="${session.name==null}" th:>请登录</span>

session就是内置对象,当然还有其他内置对象,其他内置对象请参考:http://blog.csdn.net/zsl129/article/details/53007192

九:自定义标签属性

1

<span th:sex="${stu.sex}" th:age="${stu.age}"></span>

这样写标签属性是取不到值的,你必须这么写

1

<main th:attr="sex=${stu.sex},age=${stu.age}"></span>

猜你喜欢

转载自blog.csdn.net/weixin_42107940/article/details/83216242