Ошибки при попытке обработки шаблонов с помощью Thymeleaf

Доброе утро люди! Я пытаюсь заставить работать часть шаблона и фрагментов Thymeleaf, но на странице ничего не происходит...

Я уже протестировал несколько конфигураций, но не смог сделать ничего, что заставило бы эту часть th:block работать или правильно получить layout.html.

Может кто-то мне помочь, пожалуйста? См. код ниже:

структура

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="@{/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="" 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="" class="nav-link">Home</a>
            </li>
            <li class="nav-item active">
                <a href="" class="nav-link">About</a>
            </li>
        </ul>
    </div>
</nav>

Инициоконтроллер:

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";
    }

}

Мне кажется странным, что Thymeleaf xmlns не появляется... Это нормально?

введите здесь описание изображения

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>

Я вставил другое изображение, которое показывает пустую часть и также не отображает xmlns: th = "http://www.thymeleaf.org" Я не знаю, насколько это нормально.

new.html:

введите здесь описание изображения


person sounobre    schedule 17.06.2018    source источник


Ответы (1)


ОБНОВЛЕНИЕ

Проблема вызвана проблемой зависимости, когда вы добавляете следующее в свой pom.xml, он работает:

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

СТАРЫЙ ОТВЕТ

Вероятно, вам не хватает объявления фрагмента в файле header.html, оно должно быть таким:

<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="" 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="" class="nav-link">Home</a>
            </li>
            <li class="nav-item active">
                <a href="" class="nav-link">About</a>
            </li>
        </ul>
    </div>
</nav>
</div>

Я также заметил, что в вашем layout.html есть то же объявление фрагмента, что и в new.html. Я полагаю, что один из них должен быть тегом замены?

person Sven Hakvoort    schedule 17.06.2018
comment
но новая страница не получает макет страницы layout.html - person sounobre; 17.06.2018
comment
Это правильно, вам нужно обернуть части макета, которые вы хотите использовать, во фрагмент, а затем вызвать замену в new.html, чтобы получить эти фрагменты на вашей новой странице. - person Sven Hakvoort; 17.06.2018
comment
Я сделал этот тест, который вы рекомендовали, но он продолжается таким же образом. Я загрузил его на github, если бы мог просто посмотреть. https://github.com/sounobre/thymeleaf Я вставил другое изображение, на котором ‹Ссылка› пуста. часть, а также не отображается xmlns: th = thymeleaf.org Я не знаю, насколько это нормально. - person sounobre; 18.06.2018
comment
Я добавил обновление с исправлением клона вашего репо для меня @sounobre - person Sven Hakvoort; 18.06.2018
comment
Мой друг, это сработало отлично. Как вы пришли к такому выводу? какая-то документация, которую мне не удалось проверить? Спасибо за помощь, для кого-то это может показаться мало, но я был очень признателен за ваше внимание и вашу готовность помочь мне. Благодарю вас! - person sounobre; 18.06.2018
comment
Добро пожаловать :) я нашел это здесь: thymeleaf.org/doc/articles/ layouts.html#configuration - person Sven Hakvoort; 18.06.2018