JAVA入門[22]—thymeleaf


一、thymeleaf官網

官網:https://www.thymeleaf.org/index.html

doc:https://www.thymeleaf.org/documentation.html

二、springmvc+thymeleaf從這里開始

1.修改pom.xml,引入相關依賴。

<dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.2.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.thymeleaf/thymeleaf-spring4 -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
            <version>2.1.2.RELEASE</version>
        </dependency>
</dependendies> 

2.xml方式配置thymeleaf視圖解析器:

<!-- Thymeleaf View Resolver - implementation of Spring's ViewResolver interface -->
    <bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name="templateEngine" ref="templateEngine" />
        <property name="characterEncoding" value="UTF-8" />
    </bean>

    <!-- Thymeleaf Template Engine (Spring4-specific version) -->
    <bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <property name="templateResolvers">
            <set>
                <ref bean="templateResolver" />
            </set>
        </property>
    </bean>

    <!-- Thymeleaf Template Resolver -->
    <bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
        <property name="prefix" value="/WEB-INF/templates/" />
        <property name="templateMode" value="HTML" />
        <property name="suffix" value=".html"></property>
        <property name="characterEncoding" value="UTF-8"></property>
    </bean>

3.在controller中為變量name賦值。

@RequestMapping(value="/index")
public String index(Model model){
    model.addAttribute("name","world");
    return "index.html";
}

4.在index.html中使用thymeleaf語法讀取變量name的值。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Title</title>
</head>
<body>
<div>your name is:<span th:text="${name}"></span></div>
</body>
</html>

注意:需要修改html節點,添加xmlns:th="http://www.thymeleaf.org"

三、thymeleaf常見問題小結

1.如何添加鏈接:

<a th:href="@{/category/index}">首頁</a>
<a class="btn btn-xs btn-default" th:href="@{/role/edit(roleId=${r.roleId})}">編輯</a>

2.表單綁定示例:

<form method="post" th:object="${cate}" th:action="@{/category/save}" enctype="multipart/form-data">
        <table>
            <tr>
                <td>id:</td>
                <td><input type="text" th:field="*{cateId}"></td>
            </tr>
            <tr>
                <td>name:</td>
                <td><input type="text" th:field="*{cateName}"></td>
            </tr>
            <tr>
                <td>file:</td>
                <td>
                    <input type="file" accept="image/jpeg,image/png,image/jpg" name="picture">
                </td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="提交">
                </td>
            </tr>
        </table>
    </form>

3.展示文本

<td th:text="${r.name}"></td>

如何替換子字符串

<span th:text="|welcome,${name}|"></span>

如何轉換日期格式

${#dates.format(v.AddDate,'yyyy-MM-dd HH:mm:ss')}

4.如何在js讀取后台數據

var url="[[${url}]]";

5.條件表達式

<td th:text="(${r.deleteFlag}==0)?'正常':'刪除'"></td>

6.thymeleaf如何實現switch選擇

<td th:switch="${r.type}">
    <span th:case="page">頁面</span>
    <span th:case="module">模塊</span>
    <span th:case="*">其他</span>
</td>

注意:默認值 用th:case="*"

7.th:object語法

首先在controller為對象賦值

@Controller
@RequestMapping("/demo")
public class DemoController {
    @RequestMapping("/index")
    public String index(Model model){
        OrgResource resource=new OrgResource();
        resource.setId("11");
        resource.setName("test");
        model.addAttribute("resource",resource);
        return "demo/index.html";
    }
}

使用*{}語法可以方便讀取th:object對象的屬性。

<div th:object="${resource}">
    <div th:text="*{id}"></div>
    <div th:text="*{name}"></div>
</div>

8.迭代 th:each

<th:block th:each="r,iterstat:${resources}">
    <tr th:class="${iterstat.odd}?'odd'">
        <td th:text="${r.orderNo}"></td>
        <td th:switch="${r.type}">
            <span th:case="page">頁面</span>
            <span th:case="module">模塊</span>
        </td>
        <td th:text="(${r.deleteFlag}==0)?'正常':'刪除'"></td>
        <td th:switch="${r.deleteFlag}">
            <span th:case="0"><a>刪除</a></span>
            <span th:case="1"><a>恢復</a></span>
        </td>
    </tr>
</th:block>

9.如何使用Fragment layout布局

首先新建layout.html作為布局模板。

<!DOCTYPE html>
<html lang="zh-CN" xmlns:layout="http://www.thymeleaf.org" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
……
<body>
<div layout:fragment="content"></div>
</body>
</html>

然后在index.html中使用layout,並用頁面具體內容替代content fragment。

<!DOCTYPE html>
<html layout:decorator="task/layout" xmlns:layout="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div layout:fragment="content">
  測試頁面
</div>
</body>
</html>

第一次使用layout布局的時候,調試了好半天就是不生效。后來找到了原因,dependency需要添加:

<dependency>
    <groupId>nz.net.ultraq.thymeleaf</groupId>
    <artifactId>thymeleaf-layout-dialect</artifactId>
    <version>${nz.net.ultraq.thymeleaflayout-version}</version>
</dependency>

10.如何用if條件動態調整form action

<form th:action="@{/Video/{path}(path=${isCollect}?'CollectVideoList':'VideoList')}">

11.thymeleaf回顯富文本編輯器內容
將th:text換成th:utext即可。
<script type="text/plain" id="content" name="content" th:utext="${article.content}"></script>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM