質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.59%

Controller->Thymeleafへの画面遷移

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,178

score 95

状況・実現したいこと

spring bootを使用して、Controllerからviewへ画面遷移させたいのですが、"Whitelabel Error Page"となってしまいます。
404の為、Mappingが上手くいっていないと考えておりますが、どこが間違っているのか見当もつかない状態です。

試した事

1).@RestControllerを使用して単純な文字列をreturnする場合は、問題無く表示できる事を確認しています。
2).thymeleafのクラスパスや、html側のxmlns及びタグを付け外ししてみましたが、変化ありません。
3).画面の指示通り、ErrControllerとerror.htmlを作成してみましたが、今度はステータス"500"のエラーとなってしましました。
4).エントリポイントクラスと、Controllerの配置が同一パッケージである事は確認しており、Contorollerを子パッケージに入れてみましたが効果ありませんでした。
5).Eclipseエディタ上で、コード自体のエラーや警告はありません。
配置

エラー画面

エラー画面

"localhost:8080/"アクセス時コンソール出力

2019-03-20 02:24:40.382  INFO 13048 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'
2019-03-20 02:24:40.382  INFO 13048 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'
2019-03-20 02:24:40.388  INFO 13048 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 6 ms

コード

package com.example.dev;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {
    @RequestMapping("/")
    public String helloWorld(Model model){
        model.addAttribute("message","Hello World!");
        return "index";
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <span th:text="${message}">あああ</span>
</body>
</html>
<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example.dev</groupId>
    <artifactId>bikeEC</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>bikeEC</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

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

環境

・Eclipse2017 ver4.10.0
・Spring Boot 2.1.3
・Thymeleaf 2.1.3

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

私も全くの初心者でこの間勉強がてらやったのと環境が整っていたのでやってみました。

環境


Eclipse 2018-12
Java 1.8
Spring Boot 2.1.3.RELEASE
Spring Tool Suite 3.9.6 (Eclipseプラグイン)
Thymeleaf 2.1.2

結局の所RequestMappingの("/")を("index.html")に変えました。
@RequestMapping("index")なら、URLにはlocalHost:8080/indexとなるようです。
どこのページへアクセスしたのかは分かりませんが404ページ無しエラーの様です。

package com.example.Dev;

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

@Controller
public class HelloWorldController {
    @RequestMapping("index.html") //ここが実URL
    public String helloWorld(Model model){
        model.addAttribute("message","Hello World!");
        return "index"; //ここはindexでもindex.htmlでも良い?と思う。
    }
}

また、"/"ルートでアクセスして"/index.html"ページへ飛ぶには以下の様なソースが必要だと思います。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MvcConfig implements WebMvcConfigurer{
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }
}

また、以下は"/"と"/index.html"どちらにアクセスしてもmessageをやりとりする複数パラメーターの方法。

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

@Controller
public class HelloWorldController {
    @RequestMapping(value = {"/", "index.html"})
    public String helloWorld(Model model){
        model.addAttribute("message","Hello World!");
        return "index";
    }
}

まだ回答がなかったので参考まで。

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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>BikeEc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>BikeEc</name>
    <description>Dev project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <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-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/25 21:40

    kanetuguさん
    もう一度バージョンを2.1.3に戻して同じエラーがでるか(再現性があるか)確認することはできますか?
    試して頂ける場合は、バージョン変更後にプロジェクトを右クリックし"Maven" → "Project Update..." → Update Maven Project画面でOKボタンをクリックで、プロジェクトを更新してください。

    キャンセル

  • 2019/03/26 22:39

    詳しいですねぇ。

    質問者さんがプロジェクトを削除してしまってるかどうかですよね・・・。

    キャンセル

  • 2019/03/30 12:30

    ご連絡が遅くなり申し訳ございません。それぞれ結果をご報告致します。
    1)mavnプロジェクトの更新
     更新を実施しましたが、変化はありませんでした。
    2)jarファイルの再DL
     .m2リポジトリ内のファイルを削除し、ver2.1.3で再度ビルドを実施したところ、無事ver2.1.3で利用することが出来ました。
    私のネットワーク環境がマンション契約であり非常に回線が重い為、ご指摘頂いた通りファイル破損となっていたのかもしれません。
    (正確な測定ではありませんが、現代のGbps時代にも関わらず、平均1Mbpsしか出ないのでビルドに非常に時間が掛かります...)

    皆様、ご助力頂きありがとうございました!

    キャンセル

check解決した方法

0

追記.2019/3/30

.m2リポジトリ内の各フォルダを削除後、再DL(ビルド)を実施する事で無事解決致しました。
コメントで頂いた内容によりますと、ビルド時にDLされたjarファイルの破損が原因との事です。

[.m2リポジトリ パス]※windowsの場合
ユーザー名/.m2/repository/

記.2019/3/25

結果から述べると、使用するSpring Bootのバージョンを2.1.3→2.0.2へ落としました。
その為、ver2.1.3使用環境での根本的な解決にはなっていませんが、一応手順と修正後のpom.xmlを記載します。

1).pom.xmlのparentタグ内にあるversionタグのリリースナンバーを書き換える。
2).保存してビルド完了を待つ...。(eclipse右下の"%"参照)
3).ビルド後、エクスプローラ上に警告×印残るが、そのまま実行!!!
(※spring-core.jarとjdkバージョンが合っていないのかメソッド呼び出しが上手くいっていないみたい。実行には問題なし。)
警告消すだけなら、--illegal-accessを無効にしてやれば良い。
解決するには、buildタグ内のpluginでバージョン指定 or そもそものjdkバージョンを変える??

<?xml version="1.0" encoding="UTF-8"?>
<!-- ルートタグ。基本的には決まった記述の為コピペでおk。 -->
<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">
    <!-- POMのバージョン。特に変更の必要なし -->
    <modelVersion>4.0.0</modelVersion>
    <!--プロジェクトが引き継ぐ親プロジェクトを指定。
    ここでは、springフレームワークを指定している  -->
    <parent>
        <!-- プロジェクト名(ルートパッケージ) -->
        <groupId>org.springframework.boot</groupId>
        <!-- プロジェクト名 -->
        <artifactId>spring-boot-starter-parent</artifactId>
        <!-- バージョン指定 -->
        <version>2.0.2.RELEASE</version>
        <!-- 親プロジェクトのパス? 省略で外部リポジトリから参照?? -->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!-- プロジェクト名。プロジェクトのルートパッケージを指定する。 -->
    <groupId>com.example.dev</groupId>
    <!-- プロジェクト成果物の名前。jar,war,earファイルの名前となる -->
    <artifactId>bikeEC</artifactId>
    <!-- プロジェクト自体のバージョン。自由記述? -->
    <version>0.0.1-SNAPSHOT</version>
    <!-- プロジェクト表示名。ドキュメント作成時に使用される。 -->
    <name>bikeEC</name>
    <!-- 説明文。あってもなくても良い? -->
    <description>Demo project for Spring Boot</description>
    <!-- maven及びプラグインが参照するプロパティ。
    子要素タグ名がプロパティ名/その値がプロパティ値となる。 -->
    <properties>
        <!-- ↓の場合は、プロパティ:javaのバージョン=>プロパティ値:1.8の意-->
        <java.version>1.8</java.version>
    </properties>
    <!-- プロジェクトが依存するライブラリ情報のルート。
    この中に、dependencyタグで依存ライブラリを記述 -->
    <dependencies>
        <!-- 各ライブラリ情報の親タグ -->
        <dependency>
            <!-- 識別名 -->
            <groupId>org.springframework.boot</groupId>
            <!-- 拡張子除いたファイル名 -->
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>
    <!-- ビルドに関する情報。(plugin)
    いくつかは標準でロードされるが、mavenのバージョンに依存する為、jdkに合わせてビルド
    する場合などは、新しいバージョンのプラグインを明示する必要がある。 -->
    <build>
        <!-- pluginの親タグ。配下にpluginタグを入れる。 -->
        <plugins>
            <!-- 各pluginを記述。今回は書いてないが、versionタグも必要あれば書く? -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.59%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る