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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

2回答

13514閲覧

thymeleafのth:eachが期待通りに機能しない

Enchanter

総合スコア13

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2019/06/23 09:47

編集2019/06/23 11:54

前提・実現したいこと

Spring boot(thymeleaf)のお勉強中です。
コントローラでリストを作って、それを画面のth:eachでぐるぐるして表示させることをしたいのですが、肝心のth:eachの部分が画面表示されません。
th:each部分のソースが出力されていないことからループすらしていなそう。
エラーは発生していません。
ご助言のほどお願いいたします。

該当のソースコード

Controller.java

1// selectした結果をmodelに詰めるコントローラ 2 @RequestMapping(value = "/execute", method = RequestMethod.POST) 3 public String search(Model model, @ModelAttribute KbnlistForm kbnlistForm) { 4 List<Tm_kbn> kbnlist = tm_kbnMapper.select(kbnlistForm.getId()); 5 List<KbnForm> kbnFormList = new ArrayList<KbnForm>(); 6 for (Tm_kbn kbn : kbnlist) { 7 KbnForm kbnForm = new KbnForm(); 8 kbnForm.setValue(kbn.getValue()); 9 kbnForm.setName(kbn.getName()); 10 kbnFormList.add(kbnForm); 11 } 12 kbnlistForm.setKbnlist(kbnFormList); 13 model.addAttribute("kbnlistForm", kbnlistForm); 14 return "kbn"; 15 }

Screen.html

1<!-- コントローラで詰めた検索結果を表示する(したい)画面 --> 2<form th:action="@{/execute}" th:object="${kbnlistForm}" method="post"> 3 <label>id</label> 4 <input type="text" name="id" class="form-control" th:field="*{id}"> 5 <button type="submit" name="search">検索</button> 6 7 <!-- こっちは表示される(もちろんリストの先頭だけ) --> 8 <label>value</label> 9 <input type="text" name="kbnlist[0].value" class="form-control" th:field="*{kbnlist[0].value}"> 10 <label>name</label> 11 <input type="text" name="kbnlist[0].name" class="form-control" th:field="*{kbnlist[0].name}"> 12 13 <!-- こっちが表示されなくて悩んでいる… --> 14 <tr th:each="kbn:${kbnlist}"> 15 <td th:text="${kbn.value}">value</td> 16 <td th:text="${kbn.name}">name</td> 17 </tr> 18</form>

KbnForm.java

1//KbnForm.java 2 3import lombok.Data; 4 5@Data 6public class KbnForm { 7 String value; 8 String name; 9}

KbnlistForm.java

1//KbnlistForm.java 2 3import java.util.List; 4import lombok.Data; 5 6@Data 7public class KbnlistForm { 8 String id; 9 List<KbnForm> kbnlist; 10}

補足情報(FW/ツールのバージョンなど)

Spring boot 2.1.6, thymeleaf, mybatis

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/23 11:34

「表示されない」は「そもそもループしていない」「ループはしているが中身が置きかえられない」 どちらでしょうか?エラーは出ていませんか?
m.ts10806

2019/06/23 11:35

あと念のため「KbnForm」もご提示ください。
Enchanter

2019/06/23 11:55

コメントありがとうございます。 フォームクラスを追加しました。 表示されない=そもそもループしていない、です。
退会済みユーザー

退会済みユーザー

2019/06/23 12:06

そもそも * と $ って理解して使ってますか?
guest

回答2

0

ベストアンサー

*$ を 理解してつかってください。参照レベルが違うので each が参照してるのは未登録です。
$ を使いたいなら 上位のフォーム(kbnlistForm)レベルから記述してください

th:field="*{kbnlist[0].value}"
th:each="kbn:${kbnlist}"

投稿2019/06/23 12:09

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/23 12:11

そういえばそうですね。早とちりしました。
退会済みユーザー

退会済みユーザー

2019/06/23 12:20

一部式はみするとそれ以下が表示されないケースがあるから一つの要因としてスペース問題はあるかもしれないからあながち間違いとも言い切れない。 (試すの面倒)
m.ts10806

2019/06/23 12:22

いろいろ考えるの面倒ならkbnlistForm.getKbnlist()でもいけそうですけどね。
退会済みユーザー

退会済みユーザー

2019/06/23 12:41

いけるよ。 spling-data-jpa のページングはその呼び出しを知らないと作れない
m.ts10806

2019/06/23 12:43

なるほど。参考になります。
Enchanter

2019/06/23 14:11

mts10806さん asahina1979さん ご回答ありがとうございました。無事に解決しました。 ”わからないこと”がわかってとても良い収穫がありました。 貴重なお時間をいただきありがとうございました。 #ちなみに、以下のQAがいまのわたしにはちょうどよい勉強になりました。 #https://teratail.com/questions/4676
guest

0

マニュアルに沿って書くのでしたら

Thymeleaf

1<tr th:each="prod : ${prods}"> 2

とスペースを入れているようなので(Qiitaなどの記事でも守られているようです)

こうではないでしょうか。

Thymeleaf

1<tr th:each="kbn : ${kbnlist}"> 2

※手元にすぐ確認できるSpring環境がないため、未検証です

投稿2019/06/23 12:05

m.ts10806

総合スコア80765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問