Thymeleaf

ThymeleafでHTML5を使い、閉じタグを書かない方法

投稿日:

Thymeleafのデフォルト設定では閉じタグを要求される

SpringMVC+Thymeleafで開発しようとして、HTML5を使うことにした。

<!DOCTYPE html>
<html lang=”ja” xmlns:th=”http://www.thymeleaf.org”>
<head>
<meta charset=”utf-8″>

metaタグはHTML5文法では閉じタグ必要ないはずだが、ThymeleafのXML解析により、閉じタグが要求されるのだ。

すなわち、

<meta charset=”utf-8″ />

と修正しなければならない。

これを回避するための方法は既にネットで報告されている。

<参考>
https://stackoverflow.com/questions/28624768/thymeleaf-strict-html-parsing-issue

1.spring.thymeleaf.mode=LEGACYHTML5

デフォルトのThymeleafのXML解析(パーサー)が厳密になっているためにこの問題が起きている。よって設定によってHTML5の標準に沿った解析をするように下記設定を追記する。

application.properties

spring.thymeleaf.mode=LEGACYHTML5

コレを追記して起動すると、下記エラーとなる。

Cannot perform conversion to XML from legacy HTML: The nekoHTML library is not in classpath. nekoHTML 1.9.15 or newer is required for processing templates in “LEGACYHTML5” mode [http://nekohtml.sourceforge.net]. Maven spec: “net.sourceforge.nekohtml::nekohtml::1.9.15”. IMPORTANT: DO NOT use versions of nekoHTML older than 1.9.15.

nekoHTMLが必要だと言われるのである。

nekoHTMLとは、オープンソースのHTMLパーサーである。

2.nekoHTMLの導入

pom.xmlにnekoHTMLの設定を追記する。

<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
</dependency>

コレを追記して起動すると正常表示される。
閉じタグがなくてもOKである。

-Thymeleaf

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

Thymeleafでヘッダー・フッター・メニューなどを外だしするにはフラグメントを使用する

業務システムでは、ヘッダー・フッター・メニューなどを外だしすることが多い。 SAStrutsなどではtiles:putを使用して実現していたようなことだ。 Thymeleafではフラグメント化という機 …

no image

Exception parsing document: template=”/aaa/bbb”, line 15 – column 68

SpringMVC+Thymeleafで開発をしていて、こんなエラーになる時がある。 Exception parsing document: template=”/aaa/bbb&#822 …

no image

次期業務システムのフロントエンドはHTML5+JavaScript?テンプレートエンジン?

Strutsの次期MVCフレームワークの本命として定着したのがSpringframeworkです。 SpringBootによってSpringMVCのアプリが簡単に始められるとして、業務システムに使用さ …

no image

Thymeleafのth属性と基本的な式

th属性 th:href テンプレートの実装例 <a href=”./manage” th:href=”@{/echo}”>管理画面< …

no image

Thymeleaf-SpringMVC <input type=”password”>はth:filedで出力

参考 http://arimodoki.dip.jp/promenade/t_htmlpassword.html ユーザー登録画面で、ユーザー名(ID)とパスワードを入力させて、次は確認画面で両方を表 …