0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SpiringBootでThymeleafが動かないエラーの解消方法

Posted at

はじめに

SpringBootでの画面描画のためThymeleafを使い始めたのですが、早速動かず詰まったので解消方法を記述しておきます。

環境

  • OS: Windows11
  • IDE: IntelliJ IDEA 2024.2.4 (Community Edition)
  • Java: "21.0.5" 2024-10-15 LTS
  • SpringBoot: "3.3.5"
  • Thymeleaf: "3.3.5"

問題

Thymeleafが動かない。
具体的には以下のような状態でした。

  • HTMLタグの以下の記述に対して、エラーが出る
    • xmlns:th="http://www.thymeleaf.org"
    • エラー文:URI が未登録です (設定 | 言語 & フレームワーク | スキーマと DTD)
  • 保存時のアクション:コードの整形を有効にしているが、保存時にxmlns:th="http://www.thymeleaf.org"が自動で削除される
  • th:textなどの補完が効かない

解決方法

IntelliJ Community版の仕様

  • HTMLタグの以下の記述に対して、エラーが出る
    • xmlns:th="http://www.thymeleaf.org"
    • エラー文:URI が未登録です (設定 | 言語 & フレームワーク | スキーマと DTD)
  • th:textなどの補完が効かない

上記については、IntelliJ Community版がThymeleafのサポートをしていないため起きているようです。有料版の場合、プラグインの利用が可能で、それを使うと補完が効いたり、URIの検出をしてくれるようです。

以下の記事に大変助けられました。
URI is not registered:Community Edition の IntelliJ で表示される警告への対応方法

自動削除への対処法

  • 保存時のアクション:コードの整形を有効にしているが、保存時にxmlns:th="http://www.thymeleaf.org"が自動で削除される

上記については正直原因がわかりきっていませんが、解決した方法を列挙します

  • ブランチをThymeleaf導入前に戻し、再度インストール
  • なぜかsrc/main/java/resources/templatesディレクトリがなくなっていたため、手動で作成
  • src/main/java/resources/templates内にHTMLファイルを作成
  • HTMLタグ内の記述を以下のように修正
    // lang属性を記述
    <html lang="ja" xmlns:th="http://www.thymeleaf.org">
    

個人的にはlang属性の追記か、Thymeleafの再インストールに効果があったのではないかと考えています。

備考

上記の問題以外にもいくつかハマった点があったので残しておきます。
エラーというよりも、単純に認識不足のため備考として記述します。

ソースコード

 // 修正後の動くようになったコードです
  @GetMapping("/studentList")
  public String getStudentList(Model model) {
    List<Student> allStudentList = service.searchForAllStudentList();
    List<StudentCourse> allStudentCourseList = service.searchForAllStudentCourseList();
    model.addAttribute("studentList",
        converter.getStudentDetailsList(allStudentList, allStudentCourseList));

    return "studentList";
  }

問題

  • modelの補完にaddAttributeがない
  • 画面を確認すると、studentListという文字列のみ描画される

解決方法

Modelをorg.springframework.uiで選択する

Modelにはch.qos.logback.core.modelもあり、そちらを選択するとaddAttributeが選べないようです

@RestControllerではなく@Controllerを使用する

凡ミスですが、これに気づきませんでした。。
これを修正しないと、studentListが文字列で返ってきてしまいます。

おわりに

所属しているコミュニティで同様の問題で詰まっていた方が過去にもいたようですが、最終的にIntelliJを再インストールすることで解消したようです。
上記で直らなければ再インストールを検討してみても良いかもしれません。

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?