Kesalahan saat mencoba menangani templat dengan Thymeleaf

Selamat pagi semuanya! Saya mencoba membuat bagian Thymeleaf dari templat dan fragmen berfungsi, tetapi tidak ada yang terjadi di halaman...

Saya sudah menguji beberapa konfigurasi, tetapi saya tidak dapat melakukan apa pun yang membuat bagian th:block ini berfungsi atau mendapatkan layout.html dengan benar.

Bisakah seseorang membantu saya? Lihat kode di bawah ini:

struktur

new.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"     
      xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"
      layout:decorator="layout">

    <th:block layout:fragment="content">
        <ul>
            <li th:each="name : ${list}">
                <p th:text="${name}"></p>
            </li>
        </ul>
    </th:block>
    </html>

layout.html:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org"    
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
    <meta charset="ISO-8859-1" />
    <title>Insert title here</title>
    <link rel="stylesheet" th:href="/id@{/css/bootstrap.min.css}" />
</head>
<body>

    <th:block layout:replace="fragments/header"></th:block>

    <div class="container-fluid">
        <div class="row">
            <th:block layout:fragment="content"></th:block>
        </div>
    </div>

    <script th:src="@{/js/jquery-3.3.1.min.js}"></script>
    <script th:src="@{/js/bootstrap.min.js}"></script>

</body>
</html>

header.html:

<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#nav">
        <span class="navbar-toggler-icon"></span>
    </button>
    <a href="/id" class="navbar-brand">Spring App</a>

    <div class="collapse navbar-collapse" id="nav">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a href="/id" class="nav-link">Home</a>
            </li>
            <li class="nav-item active">
                <a href="/id" class="nav-link">About</a>
            </li>
        </ul>
    </div>
</nav>

InicioController:

package com.example.teste.controller;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class InicioController {

    @GetMapping("/new")
    public String newPath(Model model) {
            List<String> list = new ArrayList<String>();

        list.add("Teste 1");
        list.add("Teste 2");
        list.add("Teste 3");
        list.add("Teste 4");
        list.add("Teste 5");

        model.addAttribute("list", list);

        return "new";
    }

}

Saya merasa aneh Thymeleaf xmlns tidak muncul... Apakah ini normal?

masukkan deskripsi gambar di sini

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>teste</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>teste</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
                <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

Saya menyisipkan gambar lain yang menunjukkan bagian kosong dan juga tidak muncul xmlns: th = "http://www.thymeleaf.org" Saya tidak tahu sejauh mana hal ini normal.

new.html:

masukkan deskripsi gambar di sini


person sounobre    schedule 17.06.2018    source sumber


Jawaban (1)


PEMBARUAN

Masalah ini disebabkan oleh masalah ketergantungan, ketika Anda menambahkan yang berikut ini ke pom.xml Anda akan berfungsi:

<dependency>
  <groupId>nz.net.ultraq.thymeleaf</groupId>
  <artifactId>thymeleaf-layout-dialect</artifactId>
  <version>2.0.5</version>
</dependency>

JAWABAN LAMA

Anda mungkin kehilangan deklarasi fragmen di header.html Anda, seharusnya seperti ini:

<div th:fragment="header">    
<nav class="navbar navbar-toggleable-md navbar-light bg-faded">
    <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#nav">
        <span class="navbar-toggler-icon"></span>
    </button>
    <a href="/id" class="navbar-brand">Spring App</a>

    <div class="collapse navbar-collapse" id="nav">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">
                <a href="/id" class="nav-link">Home</a>
            </li>
            <li class="nav-item active">
                <a href="/id" class="nav-link">About</a>
            </li>
        </ul>
    </div>
</nav>
</div>

Saya juga memperhatikan Anda memiliki deklarasi fragmen yang sama di layout.html Anda seperti di new.html. Saya kira salah satu dari ini perlu menjadi tag pengganti?

person Sven Hakvoort    schedule 17.06.2018
comment
tetapi halaman Baru tidak mendapatkan tata letak halaman layout.html - person sounobre; 17.06.2018
comment
Itu benar, Anda perlu menggabungkan bagian tata letak yang ingin Anda gunakan dalam sebuah fragmen, dan kemudian memanggil replace di new.html untuk mendapatkan fragmen tersebut di halaman baru Anda - person Sven Hakvoort; 17.06.2018
comment
Saya melakukan tes yang Anda rekomendasikan ini, tetapi hasilnya tetap sama. Saya mengunggahnya ke github jika saya bisa melihatnya. https://github.com/sounobre/thymeleaf Saya menyisipkan gambar lain yang menunjukkan ‹Tautan› kosong bagian dan juga tidak muncul xmlns: th = thymeleaf.org Saya tidak tahu seberapa jauh ini normal. - person sounobre; 18.06.2018
comment
Saya menambahkan pembaruan yang memperbaiki klon repo Anda untuk saya @sounobre - person Sven Hakvoort; 18.06.2018
comment
Temanku, itu bekerja dengan sempurna. Bagaimana Anda sampai pada kesimpulan itu? beberapa dokumentasi yang gagal saya verifikasi? Terima kasih atas bantuannya, bagi sebagian orang mungkin terasa kecil, namun saya sangat berterima kasih atas perhatian dan kesediaan Anda membantu saya. Terima kasih! - person sounobre; 18.06.2018
comment
Sama-sama :) Saya menemukannya di sini: thymeleaf.org/doc/articles/ layout.html#konfigurasi - person Sven Hakvoort; 18.06.2018