NetBeans で Thymeleaf 使う場合は HTML5 でも W3C の XML 名前空間を指定するとよい

Java でちょろっとした web アプリ作ろうと思ったんですが、テンプレートエンジン何使うかなー、というところでイケてるしヤバいという噂の、男もすなる Thymeleaf といふものをちょっと触ってみようかなと思ったらいきなりつまづいたのでメモ。

Thymeleaf では素の html ファイルをテンプレートとして使うことができます。 JSP を使う場合のような、 html タグをカスタムタグに変換する作業が不要になるのでステキ、というわけなようです。やったねたえちゃん!デザイナーとの協業が楽になるよ!

とはいってもほんとに html をそのまま使えるわけではなく、 xml 名前空間を指定して Thymeleaf の独自属性を埋め込んで使います。というわけで以下のような html を用意しました。 HTML5 ですね。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
    <head>
        <title>てすと</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    </head>
    <body>
        <p th:if="${foo}">ほげ</p>
        <p th:if="${bar}">ふが</p>
        <div><a href="form.html" th:href="@{/(form)}">投稿</a></div>
    </body>
</html>

ここでは説明はよくわかってないので省きますが、 th: から始まるやつが Thymeleaf の独自属性ですね。実際にアプリケーションを通してブラウザに表示する際はこの th: とかがそのまま表示されるわけではなく、 Thymeleaf のエンジンがよろしくやってくれます。

しかしこの html を NetBeans のエディタで開くとエラーふきまくります('A`)

なんやのこれは、と途方にくれていたところ @aoetk さんに教えて頂きました。

なるほど、 xmlns="http://www.w3.org/1999/xhtml" を書くと良いようです。

<!--
<html xmlns:th="http://www.thymeleaf.org">
-->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">

これでエラーが消えた!

HTML5 では xmlns は不要ですが、 Thymeleaf を使う上では必要になってきます。 HTML5xmlns を使っても文法違反ではないので、この場合は一応 W3C のやつも書いておくのが無難な気がします。

サンプル探すと結構 W3C名前空間指定してないものがある*1ので、 NetBeans 特有の問題なのかもしれません。

余談

Thymeleaf のサンプル探すと Spring MVC と組み合わせてるものが結構見つかりますが、 Spring と連携させるパターンが多いんですかね。 Spring は標準で Thymeleaf サポートしてるし。というわけでやっぱり web レイヤーは Spring MVC 使うかなー。