#はじめに
Spring BootとThymeleafを使用したWebアプリ開発の勉強している際に
org.thymeleaf.exceptions.TemplateInputException が発生しました。
テンプレート(html)にJavaのデータを反映する際のエラーです。
#開発環境
- OS: Windows 10
- Java: 11
- Spring Boot: 2.3.5
- Thymeleaf: 3.0.11
- ビルドツール : Gradle
- IDE: Eclipse 2020-12
#問題箇所の特定方法
エラーログの中から「line」を検索すると
エラーが発生しているhtmlファイルの行番号、桁数が分かります。
(例)
エラー発生ファイル
(template: "class path resource [templates/index.html]")
エラー発生箇所
(line 10, col 21)
This application has no explicit mapping for /error, so you are seeing this as a fallback.
Wed Jun 23 11:46:32 JST 2021
There was an unexpected error (type=Internal Server Error, status=500).
An error happened during template parsing (template: "class path resource [templates/index.html]")
org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/index.html]")
(中略)
Caused by: org.attoparser.ParseException: Exception evaluating SpringEL expression: "taskForm.isNewTask"
(template: "/index" - line 10, col 21)
(中略)
Caused by: org.thymeleaf.exceptions.TemplateProcessingException: Exception evaluating SpringEL expression: "taskForm.isNewTask"
(template: "/index" - line 10, col 21)
(後略)
#原因
- 変数の名前間違い
単純なケアレスミスです。
Javaのコードを確認して修正してください。
- Thymeleafの文法間違い
公式リファレンスを読んで修正してください。
- getterの名前が [get + フィールド名] になっていない
htmlに反映させたいデータを
エンティティなどのオブジェクトのフィールドから値を取り出す場合
getterのメソッド名が [get + フィールド名] になっていないとエラーになります。
修正前
public class Form {
private boolean isNewItem;
// 自動生成だとgetterのメソッド名が
// フィールド名だけになってしまうことがあるので
// getIsNewItemに修正しましょう。
public boolean isNewItem() {
return isNewItem;
}
public void setNewItem(boolean isNewItem) {
this.isNewItem = isNewItem;
}
}
修正後
public class Form {
private boolean isNewItem;
// getIsNewItemに修正しました。
public boolean getIsNewItem() {
return isNewItem;
}
(後略)
}
boolean型のフィールドのgetterを自動生成すると
getterのメソッド名がフィールド名だけになってしまうことがあるので
変数や文法の間違えが見つからない場合はgetterの確認をしてみてください。
#参考サイト