web-dev-qa-db-ja.com

円形ビューパスエラーSpring boot

私は春が初めてです。製品のリストを表示するSpring Bootを使用してMVCアプリケーションを構築しようとしています。しかし、私は以下のエラーが発生しています:

javax.servlet.ServletException:循環ビューパス[製品]:現在のハンドラーURL [/製品]に再度ディスパッチします。 ViewResolverの設定を確認してください! (ヒント:これは、デフォルトのビュー名の生成により、未指定のビューの結果である可能性があります。)

ここにコントローラーがあります:

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

    }

これがメインクラスです。

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

および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>

products.html/staticフォルダーにあります。また、Eclipse Keplerを使用しています。

27
sohan

spring-boot-starter-thymeleaf依存関係を追加すると、問題が解決しました。

したがって、これをpom.xmlファイルに追加します。

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

更新:Eclipseを使用していて、Gradleを使用している場合、これは機能しない可能性があります。その理由は、プロジェクトを「gradleプロジェクト」としてインポートしていない場合、Eclipseはthymeleafを検出しません。だからここに解決策があります:

ステップ1:コマンドラインで「gradle Eclipse」を実行します。

ステップ2:「gradle wrapper」を実行する

ステップ3:Eclipseでgradleプロジェクトとしてインポートします(この前にインポート済みのプロジェクトを削除します)

ステップ4:Eclipseを使用して実行する

ステップ5:お楽しみください!

85
user18853

Products.htmlは/ staticフォルダーです

デフォルトでは、Spring BootはクラスパスのtemplatesディレクトリでThymeleafテンプレートを探します。 products.htmlsrc/main/resources/templatesディレクトリに移動します。テンプレートエンジンとSpring Bootの詳細については、 Spring Boot Documentation をご覧ください。

デフォルト構成でthymeleafテンプレートエンジンを使用している場合、テンプレートはsrc/main/resources/templatesから自動的に選択されます

また、staticディレクトリは、テンプレートではなくStatic Contentsを配置する場所です。

14
Ali Dehghani

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>

最新バージョンは mvnrepository にあります。

14
Mehraj Malik

クラスにレストコントローラの@ RestControllerを置くのを忘れたため、ここにいることができます:)

2
S.Dayneko