5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Spring Boot + Thymeleaf データの反映の際のエラー解消法

Last updated at Posted at 2021-06-23

#はじめに

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 + フィールド名] になっていないとエラーになります。

修正前

Form.java

public class Form {

	private boolean isNewItem;
        
        // 自動生成だとgetterのメソッド名が
    // フィールド名だけになってしまうことがあるので
    // getIsNewItemに修正しましょう。
	public boolean isNewItem() {
		return isNewItem;
	}

	public void setNewItem(boolean isNewItem) {
		this.isNewItem = isNewItem;
	}
}

修正後

Form.java

public class Form {

	private boolean isNewItem;
        
    // getIsNewItemに修正しました。
	public boolean getIsNewItem() {
		return isNewItem;
	}
(後略)
}

boolean型のフィールドのgetterを自動生成すると
getterのメソッド名がフィールド名だけになってしまうことがあるので
変数や文法の間違えが見つからない場合はgetterの確認をしてみてください。

#参考サイト

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?