解決したいこと
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にて指定しているデータが出力されない。(下記の画像のように表示される)
![イ
実際にデベロッパーツールを見ても反映されていない。
該当するソースコード
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(自動生成されるクラス)
java
1package com.example.demo; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication 7public class GradleBulletinBoardApplication { 8 9 public static void main(String[] args) { 10 SpringApplication.run(GradleBulletinBoardApplication.class, args); 11 } 12 13} 14
schema.sql(テーブル作成)
sql
1USE gradle; 2 3DROP TABLE IF EXISTS test_table; 4 5CREATE TABLE test_table 6(id INT NOT NULL AUTO_INCREMENT,name VARCHAR(100),old INT,PRIMARY KEY(id)); 7
data.sql(挿入するデータ)
sql
1INSERT INTO test_table(name, old) 2VALUES('Taro', 30), ('Jiro', 25),('Saburo', 22);
TestController.java
java
1package com.example.demo; 2 3import java.util.List; 4import java.util.Map; 5 6import org.springframework.beans.factory.annotation.Autowired; 7import org.springframework.jdbc.core.JdbcTemplate; 8import org.springframework.stereotype.Controller; 9import org.springframework.ui.Model; 10import org.springframework.web.bind.annotation.GetMapping; 11import org.springframework.web.bind.annotation.RequestMapping; 12 13@Controller 14@RequestMapping("/") 15public class TestController { 16 17 @Autowired 18 private JdbcTemplate jdbcTemplate; 19 20 @GetMapping("/index") 21 public String index(Model model) { 22 // test_tableの全てのレコードを取得する 23 String sql = "SELECT * FROM test_table"; 24 25 // 変数listにSQL文で取得したデータが代入される 26 List<Map<String, Object>> list = jdbcTemplate.queryForList(sql); 27 28 System.out.println(list); 29 30 // modelオブジェクトのaddAttributeを使ってModelにlistを追加している 31 model.addAttribute("testlist", list); 32 33 // Viewファイルの指定 34 return "index"; 35 } 36} 37
index.html(DBのデータを出力する用)
html
1<!DOCTYPE html> 2<html lang="ja" xmlns:th="http://www.thymeleaf.org"> 3<head> 4<meta charset="UTF-8"> 5<title>Insert title here</title> 6</head> 7<body> 8 <table border="1"> 9 <tr> 10 <th>id</th> 11 <th>name</th> 12 <th>old</th> 13 </tr> 14 <tr th:each="test:${testlist}"> 15 <td th:text="${test.id}"></td> 16 <td th:text="${test.name}"></td> 17 <td th:text="${test.pld}"></td> 18 </tr> 19 </table> 20</body> 21</html>
自分で試したこと
①ターミナルでDB上にテーブルの作成とデータの追加が成功しているか確認。
⇒無事実行できている。
②コントローラーのindexメソッドにてlistにうまくデータが受け渡されているか確認。
⇒コンソールには何も出力されておらず、データの受け渡しがうまく出来ていない?
java
1System.out.println(list);
③HTMLのデベロッパーツールの確認
⇒th:text部分が反映されていない。
④MySQLからPostgreSQLに変更しても同じ結果になったため、DBが問題ではなさそう。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。