likemii
@likemii (mii)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

SpringBoot Gradleを利用し、HTML上にデータ出力をしたい

解決したいこと

SpringToolSuite4を利用し、DBに格納されたデータ3名分の「id」「名前」「年齢」をHTML上にテーブルの形式で出力したいのですが、th:textにて指定したデータがHTML上に出力されません。
解決方法をご教示頂きたいです。
また、認識が異なるところがございましたらご指摘頂きたいです。

使用している環境は下記の通りです。
・使用しているpc:mac
・SpringToolSuite4
・ビルドツール:Gradle
・DB:MySQL

今回の手順は下記を参考にしました。
URL:https://qiita.com/t-yama-3/items/969825d5c1bc4a16866d
※プロジェクト名のみ「gradle-bulletin-board」に変更しております。

発生している問題・エラー(一部抜粋)

table-header部分のみ表示され、th:textにて指定しているデータが出力されない。(下記の画像のように表示される)
84F9EA24-2685-4CFA-9058-AA221988FEF4_4_5005_c.jpeg

実際にデベロッパーツールを見ても反映されていない。
184C7944-B339-436D-BCCC-54F03F6A21A6.jpeg

該当するソースコード

application.properties(パスワードは変更しております)

spring.datasource.url=jdbc:mysql://localhost:3306/gradle
spring.datasource.username=manami
spring.datasource.password=XXXXXX //パスワードは念の為隠しております
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql
spring.sql.init.data-locations=classpath:data.sql
spring.sql.init.encoding=utf-8

build.gradle

plugins {
    id 'org.springframework.boot' version '2.5.7'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    runtimeOnly 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

GradleBulletinBoardApplication.java(自動生成されるクラス)

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class GradleBulletinBoardApplication {

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

}

schema.sql(テーブル作成)

USE gradle;

DROP TABLE IF EXISTS test_table;

CREATE TABLE test_table
(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(100),old INT,PRIMARY KEY(id));

data.sql(挿入するデータ)

INSERT INTO test_table(name, old)
VALUES('Taro', 30), ('Jiro', 25),('Saburo', 22);

TestController.java

package com.example.demo;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
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 TestController {

    @Autowired
     private JdbcTemplate jdbcTemplate;

    @GetMapping("/index")
    public String index(Model model) {
        // test_tableの全てのレコードを取得する
        String sql = "SELECT * FROM test_table";

        // 変数listにSQL文で取得したデータが代入される
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);

        System.out.println(list);

        // modelオブジェクトのaddAttributeを使ってModelにlistを追加している
        model.addAttribute("testlist", list);

        // Viewファイルの指定
        return "index";
    }
}

index.html(DBのデータを出力する用)

<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <table border="1">
        <tr>
            <th>id</th>
            <th>name</th>
            <th>old</th>
        </tr>
        <tr th:each="test:${testlist}">
            <td th:text="${test.id}"></td>
            <td th:text="${test.name}"></td>
            <td th:text="${test.pld}"></td>
        </tr>
    </table>
</body>
</html>

自分で試したこと

①ターミナルでDB上にテーブルの作成とデータの追加が成功しているか確認。
⇒無事実行できている。

②コントローラーのindexメソッドにてlistにうまくデータが受け渡されているか確認。
⇒コンソールには何も出力されておらず、データの受け渡しがうまく出来ていない?

System.out.println(list);

③HTMLのデベロッパーツールの確認
⇒th:text部分が反映されていない。

④MySQLからPostgreSQLに変更しても表示は変わらなかったため、DBの問題ではなさそう。

0

No Answers yet.

Your answer might help someone💌