記事のターゲット
- Thymeleafを扱える人
- なぜかデータが表示されない人
基本的な使用方法
JSPファイル
<form th:action="@{/schedule/confirm}" th:object="${scheduleSessionForm}" method="post">
<p class="schedule_content">詳細</p>
<input type="text" name="content" th:field="*{scheduleForm.content}">
<p class="schedule_type">予定の種別:</p>
<select id="typeId" name="typeId" >
<!-- 何も選択していないときに表示したいものを記述 -->
<option value="">どんな予定?</option>
<!-- Modelで受け取ったForm内のリストを回す -->
<option th:each="type:${scheduleSessionForm.scheduleTypeFormList}" th:value="${type.id}" th:text="${type.name}" th:selected="${type.id == id}" ></option>
</select>
</form>
Formクラス
public class ScheduleSessionForm {
private ScheduleForm scheduleForm;
private List<ScheduleTypeForm> scheduleTypeFormList;
//以下略
}
うまく動かない原因
今回この記事を書くのは私自身、詰まった部分があったのでメモとして残しておこうと思ったからです。
前述のJSPを見ていただけるとわかるのですが、Formタグ内でth:object="${scheduleSessionForm}"と指定し、Form内ではそのあとに続くプロパティ名を記述すればいいと思っていたのですがそうではないみたいです。
具体的に言うと、4行目ではth:field="*{scheduleForm.content}"と記述するだけできちんと値が表示される(scheduleSessionForm.scheduleForm.contentと記述しなくてもいい)のですが、セレクトタグ内で指定するときには省略できないみたいです。
ですので、th:each="type:${scheduleSessionForm.scheduleTypeFormList}"と書くことできちんとリストを取得しループ処理を行うことができました。
まとめ
結論としましては、
th:eachで指定するフィールド名は省略できない
ということがわかりました。簡潔ですが以上メモでした。