web-dev-qa-db-ja.com

Thymeleaf-厳密なHTML解析の問題

HTML5では、対応するENDタグなしで、一部のタグをより自由に記述できます。例えばinputを閉じる必要はありません</input>。ただし、選択した場合テンプレートモードHTML5 Thymeleafでは、Thymeleafエンジンはこれについて不満を示し、HTMLテンプレートを解析しません。このデフォルトのStrictタグチェック動作を上書きしたい。つまり、Thymeleafは、メタタグと入力(およびALIKE)タグを含むHTMLテンプレートを、それらのRESPなしで解析します。終了タグ。 Pl。ガイド。

あなたはこのようなものを持っているときにも文句を言う

<a href="/home/pic/image.png" download="/path/to/file" data-gallery></a>

data-galleryが発生すると例外がスローされ、「=が後に続くはずです」がスローされます。これは、HTML5の柔軟性を奪うため、一種の迷惑なものです。

22
Mushtaq Jameel

あなたがしなければならないすべては、「LEGACYHTML5」モードでThymeleafを実行することであり、それは魅力のように機能します。 this および this の投稿のおかげで、私は解決策を見つけ、SOに文書化しているので、他の人が同じ問題を経験する必要はありませんこの答えを見つけることに。

レガシーモードを設定するには、Spring XMLファイルでBeanを定義できます。

<!-- View TemplateResolver -->
<bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
    <property name="templateMode" value="LEGACYHTML5"/>
    <property name="cacheable" value="false"/>
</bean>

または、application.propertiesファイルにプロパティを追加します。

spring.thymeleaf.mode=LEGACYHTML5
spring.thymeleaf.cache=false

どちらの場合も、nekohtml jarをプロジェクトに追加する必要があります。または、mavenを実行している場合は、その依存関係をpom.xmlに追加できます。

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

Gradle

'net.sourceforge.nekohtml:nekohtml:1.9.21'
58
Mushtaq Jameel

ここでは、きちんとした方法でそれを行うことができます

手順1: application.propertiesファイルにthymeleafモードを追加します。

resources/application.properties

spring.thymeleaf.mode=LEGACYHTML5

ステップ2: nekohtml依存関係をpom.xmlファイルに追加します。

pom.xml

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