web-dev-qa-db-fra.com

Erreur de chemin de vue circulaire

Je suis très nouveau au printemps. J'essaie de créer une application MVC à l'aide de Spring Boot, qui affiche une liste de produits. Mais je reçois l'erreur ci-dessous:

javax.servlet.ServletException: chemin de vue circulaire [produits]: renvoie à nouveau l'URL du gestionnaire actuel [/ produits]. Vérifiez votre configuration ViewResolver! (Conseil: cela peut être le résultat d'une vue non spécifiée, en raison de la génération du nom de la vue par défaut.)

Voici le contrôleur:

package com.springframeworkguru.controllers;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.springframeworkguru.services.ProductService;


    @Controller
    public class ProductController {

        private ProductService productService;

        @Autowired
        public void setProductService(ProductService productService) {
            this.productService = productService;
        }

        @RequestMapping("/products")
        public String listProducts(Model model){

            model.addAttribute("products", productService.listAllProducts());

            return "products";
        }

    }

C'est la classe principale:

package com.springframeworkguru;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.context.web.SpringBootServletInitializer;

import com.springframeworkguru.controllers.ProductController;

@SpringBootApplication
public class SpringmvcApplication extends SpringBootServletInitializer{

     public static void main(String[] args) {
        SpringApplication.run(SpringmvcApplication.class, args);
    }
}

et products.html:

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Spring Core Online Tutorial - List Products</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

    <link href="http://cdn.jsdelivr.net/webjars/bootstrap/3.3.4/css/bootstrap.min.css"
          th:href="@{/webjars/bootstrap/3.3.5/css/bootstrap.min.css}"
          rel="stylesheet" media="screen"/>

    <script src="http://cdn.jsdelivr.net/webjars/jquery/2.1.4/jquery.min.js"
            th:src="@{/webjars/jquery/2.1.4/jquery.min.js}"></script>

    <link href="../css/spring-core.css"
          th:href="@{css/spring-core.css}" rel="stylesheet" media="screen"/>
</head>
<body>
<div class="container">
    <div th:if="${not #lists.isEmpty(products)}">
        <h2>Product List</h2>
        <table class="table table-striped">
            <tr>
                <th>Id</th>
                <th>Description</th>
                <th>Price</th>
                <th>Image URL</th>
                <th>List</th>
            </tr>
            <tr th:each="product : ${products}">
                <td th:text="${product.id}"></td>
                <td th:text="${product.description}"></td>
                <td th:text="${product.price}"></td>
                <td th:text="${product.imageUrl}"></td>
                <td><a th:href="${'/product/' + product.id}">View</a> </td>
            </tr>
        </table>
    </div>
</div>

</body>
</html>

Le products.html Est dans le dossier /static. En outre, j'utilise Eclipse Kepler.

27
sohan

Ajouter spring-boot-starter-thymeleaf _ dépendance résolue le problème.

Ajoutez donc ceci à votre fichier pom.xml:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Mise à jour: Si vous utilisez Eclipse et que vous utilisez Gradle, il est possible que cela ne fonctionne pas. La raison en est que si vous n’avez pas importé le projet en tant que "projet de modification", Eclipse ne détectera pas d’empreinte thymeleaf. Alors voici la solution:

Étape 1: Exécutez "gradle Eclipse" sur la ligne de commande.

Étape 2: Exécuter "gradle wrapper"

Étape 3: Dans l'importation Eclipse en tant que projet dégradé (avant cela, supprimez le projet déjà importé)

Étape 4: Maintenant, utilisez Eclipse

Step5: Profitez!

85
user18853

Le fichier products.html est/static

Par défaut, Spring Boot recherchera les modèles Thymeleaf dans le répertoire templates du chemin de classe. Alors déplacez votre products.html à src/main/resources/templates répertoire. Vous pouvez en savoir plus sur les moteurs de modèles et Spring Boot sur le Spring Boot Documentation :

Lorsque vous utilisez le moteur de modèles thymeleaf avec la configuration par défaut, vos modèles sont automatiquement récupérés à partir de src/main/resources/templates

De plus, le répertoire static est l'endroit où vous devriez placer votre contenu statique , pas vos modèles.

14
Ali Dehghani

Ajoutez la dépendance suivante dans pom.xml

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
    <version>1.4.0.RELEASE</version>
</dependency>

La dernière version peut être trouvée sur mvnrepository

14
Mehraj Malik

Vous pouvez être ici parce que vous avez oublié de placer le @ RestController de votre contrôleur de repos sur la classe :)

2
S.Dayneko