小结
Thymeleaf 2升级到Tymeleaf 3导致Layout不起作用,进行了解决。
问题及解决
最近将Thymeleaf 2升级到Tymeleaf 3,对build.gradle
进行了以下修改:
旧版本:
plugins {
id 'java'
id 'org.springframework.boot' version '2.3.3.RELEASE'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}
...
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:2.0.0'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:2.4.1'
...
}
改成新版本后:
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.3'
id 'io.spring.dependency-management' version '1.1.4'
}
...
dependencies {
...
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.0.0'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.0.0'
...
}
也就是说Spring Boot版本从2.3.3升级到3.2.3,Thymeleaf和layout dialect也由版本2升级到版本3,升级后,出问题了:layout无法正常显示。
从log来看,Thymeleaf和layout dialect可以正常加载,以下:
21:40:32.080 [http-**加粗样式**nio-8080-exec-1] DEBUG org.thymeleaf.TemplateEngine - [THYMELEAF] INITIALIZING TEMPLATE ENGINE
21:40:32.534 [http-nio-8080-exec-1] DEBUG org.thymeleaf.TemplateEngine.CONFIG - Initializing Thymeleaf Template engine configuration...
[THYMELEAF] TEMPLATE ENGINE CONFIGURATION:
[THYMELEAF] * Thymeleaf version: 3.1.2.RELEASE (built 2023-07-30T19:25:50+0000)
[THYMELEAF] * Cache Manager implementation: org.thymeleaf.cache.StandardCacheManager
[THYMELEAF] * Template resolvers:
[THYMELEAF] * org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver
[THYMELEAF] * Message resolvers:
[THYMELEAF] * org.thymeleaf.spring6.messageresolver.SpringMessageResolver
[THYMELEAF] * Link builders:
[THYMELEAF] * org.thymeleaf.linkbuilder.StandardLinkBuilder
[THYMELEAF] * Dialect [1 of 2]: SpringStandard (org.thymeleaf.spring6.dialect.SpringStandardDialect)
[THYMELEAF] * Prefix: "th"
[THYMELEAF] * Processors for Template Mode: HTML
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {th:include,data-th-include}] [100]: org.thymeleaf.standard.processor.StandardIncludeTagProcessor
[THYMELEAF] * [* {th:insert,data-th-insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF] * [* {th:replace,data-th-replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF] * [* {th:each,data-th-each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF] * [* {th:switch,data-th-switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF] * [* {th:case,data-th-case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF] * [* {th:if,data-th-if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF] * [* {th:unless,data-th-unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
[THYMELEAF] * [* {th:object,data-th-object}] [500]: org.thymeleaf.spring6.processor.SpringObjectTagProcessor
[THYMELEAF] * [* {th:with,data-th-with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
[THYMELEAF] * [* {th:attr,data-th-attr}] [700]: org.thymeleaf.standard.processor.StandardAttrTagProcessor
[THYMELEAF] * [* {th:attrprepend,data-th-attrprepend}] [800]: org.thymeleaf.standard.processor.StandardAttrprependTagProcessor
[THYMELEAF] * [* {th:attrappend,data-th-attrappend}] [900]: org.thymeleaf.standard.processor.StandardAttrappendTagProcessor
[THYMELEAF] * [* {th:method,data-th-method}] [990]: org.thymeleaf.spring6.processor.SpringMethodTagProcessor
[THYMELEAF] * [* {th:alt-title,data-th-alt-title}] [990]: org.thymeleaf.standard.processor.StandardAltTitleTagProcessor
[THYMELEAF] * [* {th:lang-xmllang,data-th-lang-xmllang}] [990]: org.thymeleaf.standard.processor.StandardLangXmlLangTagProcessor
[THYMELEAF] * [* {th:action,data-th-action}] [1000]: org.thymeleaf.spring6.processor.SpringActionTagProcessor
[THYMELEAF] * [* {th:href,data-th-href}] [1000]: org.thymeleaf.spring6.processor.SpringHrefTagProcessor
[THYMELEAF] * [* {th:src,data-th-src}] [1000]: org.thymeleaf.spring6.processor.SpringSrcTagProcessor
[THYMELEAF] * [* {th:pubdate,data-th-pubdate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:loop,data-th-loop}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:async,data-th-async}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:required,data-th-required}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:autoplay,data-th-autoplay}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:autofocus,data-th-autofocus}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:controls,data-th-controls}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:ismap,data-th-ismap}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:checked,data-th-checked}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:reversed,data-th-reversed}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:novalidate,data-th-novalidate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:multiple,data-th-multiple}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:selected,data-th-selected}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:default,data-th-default}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:hidden,data-th-hidden}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:nowrap,data-th-nowrap}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:disabled,data-th-disabled}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:seamless,data-th-seamless}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:open,data-th-open}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:defer,data-th-defer}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:formnovalidate,data-th-formnovalidate}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:declare,data-th-declare}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:scoped,data-th-scoped}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:readonly,data-th-readonly}] [1000]: org.thymeleaf.standard.processor.StandardConditionalFixedValueTagProcessor
[THYMELEAF] * [* {th:onpause,data-th-onpause}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onchange,data-th-onchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onshow,data-th-onshow}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onunload,data-th-onunload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmouseup,data-th-onmouseup}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onemptied,data-th-onemptied}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondragstart,data-th-ondragstart}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onafterprint,data-th-onafterprint}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onblur,data-th-onblur}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:oncontextmenu,data-th-oncontextmenu}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmousedown,data-th-onmousedown}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ontimeupdate,data-th-ontimeupdate}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondrop,data-th-ondrop}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondurationchange,data-th-ondurationchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmessage,data-th-onmessage}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onvolumechange,data-th-onvolumechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onloadedmetadata,data-th-onloadedmetadata}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onended,data-th-onended}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onwaiting,data-th-onwaiting}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondragend,data-th-ondragend}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onkeyup,data-th-onkeyup}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onloadstart,data-th-onloadstart}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onredo,data-th-onredo}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onsuspend,data-th-onsuspend}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onresize,data-th-onresize}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onpopstate,data-th-onpopstate}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onoffline,data-th-onoffline}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmouseover,data-th-onmouseover}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ononline,data-th-ononline}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onbeforeprint,data-th-onbeforeprint}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onclick,data-th-onclick}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onstorage,data-th-onstorage}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onundo,data-th-onundo}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onformchange,data-th-onformchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onforminput,data-th-onforminput}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onratechange,data-th-onratechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onprogress,data-th-onprogress}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:oncanplay,data-th-oncanplay}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondragenter,data-th-ondragenter}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onabort,data-th-onabort}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onloadeddata,data-th-onloadeddata}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onseeking,data-th-onseeking}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondragover,data-th-ondragover}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onkeydown,data-th-onkeydown}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onreset,data-th-onreset}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onplay,data-th-onplay}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onselect,data-th-onselect}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:oncanplaythrough,data-th-oncanplaythrough}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onerror,data-th-onerror}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmousemove,data-th-onmousemove}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onscroll,data-th-onscroll}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmouseout,data-th-onmouseout}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:oninvalid,data-th-oninvalid}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onbeforeunload,data-th-onbeforeunload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onplaying,data-th-onplaying}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondblclick,data-th-ondblclick}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onsubmit,data-th-onsubmit}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onseeked,data-th-onseeked}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:oninput,data-th-oninput}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onkeypress,data-th-onkeypress}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onfocus,data-th-onfocus}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onload,data-th-onload}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onmousewheel,data-th-onmousewheel}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onstalled,data-th-onstalled}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondragleave,data-th-ondragleave}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onhashchange,data-th-onhashchange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:ondrag,data-th-ondrag}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:onreadystatechange,data-th-onreadystatechange}] [1000]: org.thymeleaf.standard.processor.StandardDOMEventAttributeTagProcessor
[THYMELEAF] * [* {th:inline,data-th-inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineHTMLTagProcessor
[THYMELEAF] * [* {th:type,data-th-type}] [1000]: org.thymeleaf.standard.processor.StandardNonRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:name,data-th-name}] [1000]: org.thymeleaf.standard.processor.StandardNonRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:for,data-th-for}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:sizes,data-th-sizes}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:cellpadding,data-th-cellpadding}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:charset,data-th-charset}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:list,data-th-list}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:cite,data-th-cite}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:rel,data-th-rel}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:abbr,data-th-abbr}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:srclang,data-th-srclang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:usemap,data-th-usemap}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:formaction,data-th-formaction}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:data,data-th-data}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:width,data-th-width}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:alt,data-th-alt}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:content,data-th-content}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:min,data-th-min}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:colspan,data-th-colspan}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:preload,data-th-preload}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:media,data-th-media}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:height,data-th-height}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:vspace,data-th-vspace}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:formmethod,data-th-formmethod}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:standby,data-th-standby}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:codebase,data-th-codebase}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:span,data-th-span}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:align,data-th-align}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:optimum,data-th-optimum}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:id,data-th-id}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:maxlength,data-th-maxlength}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:formtarget,data-th-formtarget}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:datetime,data-th-datetime}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:contextmenu,data-th-contextmenu}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:size,data-th-size}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:autocomplete,data-th-autocomplete}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:axis,data-th-axis}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:accept-charset,data-th-accept-charset}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:icon,data-th-icon}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:kind,data-th-kind}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:http-equiv,data-th-http-equiv}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:label,data-th-label}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:keytype,data-th-keytype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:class,data-th-class}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:frame,data-th-frame}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:rowspan,data-th-rowspan}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:cols,data-th-cols}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:challenge,data-th-challenge}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:scheme,data-th-scheme}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:accept,data-th-accept}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:rules,data-th-rules}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:max,data-th-max}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:codetype,data-th-codetype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:draggable,data-th-draggable}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:pattern,data-th-pattern}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:tabindex,data-th-tabindex}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:radiogroup,data-th-radiogroup}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:target,data-th-target}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:poster,data-th-poster}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:low,data-th-low}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:wrap,data-th-wrap}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:summary,data-th-summary}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:archive,data-th-archive}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:title,data-th-title}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:audio,data-th-audio}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:enctype,data-th-enctype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:placeholder,data-th-placeholder}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:valuetype,data-th-valuetype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:scope,data-th-scope}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:form,data-th-form}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:hreflang,data-th-hreflang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:accesskey,data-th-accesskey}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:style,data-th-style}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:headers,data-th-headers}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:lang,data-th-lang}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:classid,data-th-classid}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:bgcolor,data-th-bgcolor}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:scrolling,data-th-scrolling}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:formenctype,data-th-formenctype}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:rows,data-th-rows}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:compact,data-th-compact}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:high,data-th-high}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:dir,data-th-dir}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:dropzone,data-th-dropzone}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:border,data-th-border}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:rev,data-th-rev}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:hspace,data-th-hspace}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:sandbox,data-th-sandbox}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:start,data-th-start}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:step,data-th-step}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:cellspacing,data-th-cellspacing}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:marginheight,data-th-marginheight}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:manifest,data-th-manifest}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:marginwidth,data-th-marginwidth}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:longdesc,data-th-longdesc}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:background,data-th-background}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:frameborder,data-th-frameborder}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:contenteditable,data-th-contenteditable}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:spellcheck,data-th-spellcheck}] [1000]: org.thymeleaf.standard.processor.StandardRemovableAttributeTagProcessor
[THYMELEAF] * [* {th:xmlbase,data-th-xmlbase}] [1000]: org.thymeleaf.standard.processor.StandardXmlBaseTagProcessor
[THYMELEAF] * [* {th:xmllang,data-th-xmllang}] [1000]: org.thymeleaf.standard.processor.StandardXmlLangTagProcessor
[THYMELEAF] * [* {xmlns:th}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
[THYMELEAF] * [* {th:xmlspace,data-th-xmlspace}] [1000]: org.thymeleaf.standard.processor.StandardXmlSpaceTagProcessor
[THYMELEAF] * [{option} *] [1005]: org.thymeleaf.spring6.processor.SpringOptionInSelectFieldTagProcessor
[THYMELEAF] * [* {th:value,data-th-value}] [1010]: org.thymeleaf.spring6.processor.SpringValueTagProcessor
[THYMELEAF] * [* {th:classappend,data-th-classappend}] [1100]: org.thymeleaf.standard.processor.StandardClassappendTagProcessor
[THYMELEAF] * [* {th:styleappend,data-th-styleappend}] [1100]: org.thymeleaf.standard.processor.StandardStyleappendTagProcessor
[THYMELEAF] * [* {th:text,data-th-text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
[THYMELEAF] * [* {th:utext,data-th-utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
[THYMELEAF] * [* {th:fragment,data-th-fragment}] [1500]: org.thymeleaf.standard.processor.StandardFragmentTagProcessor
[THYMELEAF] * [* {th:assert,data-th-assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
[THYMELEAF] * [* {th:remove,data-th-remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
[THYMELEAF] * [* {th:errors,data-th-errors}] [1700]: org.thymeleaf.spring6.processor.SpringErrorsTagProcessor
[THYMELEAF] * [{input} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringInputCheckboxFieldTagProcessor
[THYMELEAF] * [{input} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringInputFileFieldTagProcessor
[THYMELEAF] * [{input} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringInputGeneralFieldTagProcessor
[THYMELEAF] * [{input} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringInputPasswordFieldTagProcessor
[THYMELEAF] * [{input} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringInputRadioFieldTagProcessor
[THYMELEAF] * [{option} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringOptionFieldTagProcessor
[THYMELEAF] * [{select} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringSelectFieldTagProcessor
[THYMELEAF] * [{textarea} {th:field,data-th-field}] [1700]: org.thymeleaf.spring6.processor.SpringTextareaFieldTagProcessor
[THYMELEAF] * [* {th:uerrors,data-th-uerrors}] [1700]: org.thymeleaf.spring6.processor.SpringUErrorsTagProcessor
[THYMELEAF] * [* {th:errorclass,data-th-errorclass}] [1800]: org.thymeleaf.spring6.processor.SpringErrorClassTagProcessor
[THYMELEAF] * [* {th:ref,data-th-ref}] [10000]: org.thymeleaf.standard.processor.StandardRefAttributeTagProcessor
[THYMELEAF] * [{th:block,th-block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
[THYMELEAF] * [* th:*] [2147483647]: org.thymeleaf.standard.processor.StandardDefaultAttributesTagProcessor
[THYMELEAF] * Text Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
[THYMELEAF] * DOCTYPE Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardTranslationDocTypeProcessor
[THYMELEAF] * CDATA Section Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningCDATASectionProcessor
[THYMELEAF] * Comment Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningCommentProcessor
[THYMELEAF] * [1100]: org.thymeleaf.standard.processor.StandardConditionalCommentProcessor
[THYMELEAF] * Processors for Template Mode: XML
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {th:include}] [100]: org.thymeleaf.standard.processor.StandardIncludeTagProcessor
[THYMELEAF] * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF] * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF] * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF] * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF] * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF] * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF] * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
[THYMELEAF] * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
[THYMELEAF] * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
[THYMELEAF] * [* {th:attr}] [700]: org.thymeleaf.standard.processor.StandardAttrTagProcessor
[THYMELEAF] * [* {th:attrprepend}] [800]: org.thymeleaf.standard.processor.StandardAttrprependTagProcessor
[THYMELEAF] * [* {th:attrappend}] [900]: org.thymeleaf.standard.processor.StandardAttrappendTagProcessor
[THYMELEAF] * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineXMLTagProcessor
[THYMELEAF] * [* {xmlns:th}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
[THYMELEAF] * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
[THYMELEAF] * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
[THYMELEAF] * [* {th:fragment}] [1500]: org.thymeleaf.standard.processor.StandardFragmentTagProcessor
[THYMELEAF] * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
[THYMELEAF] * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
[THYMELEAF] * [* {th:ref}] [10000]: org.thymeleaf.standard.processor.StandardRefAttributeTagProcessor
[THYMELEAF] * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
[THYMELEAF] * [* th:*] [2147483647]: org.thymeleaf.standard.processor.StandardDefaultAttributesTagProcessor
[THYMELEAF] * Text Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
[THYMELEAF] * CDATA Section Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningCDATASectionProcessor
[THYMELEAF] * Comment Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningCommentProcessor
[THYMELEAF] * Processors for Template Mode: TEXT
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF] * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF] * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF] * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF] * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF] * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF] * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
[THYMELEAF] * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
[THYMELEAF] * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
[THYMELEAF] * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
[THYMELEAF] * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
[THYMELEAF] * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
[THYMELEAF] * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
[THYMELEAF] * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
[THYMELEAF] * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
[THYMELEAF] * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
[THYMELEAF] * Text Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
[THYMELEAF] * Processors for Template Mode: JAVASCRIPT
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF] * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF] * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF] * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF] * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF] * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF] * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
[THYMELEAF] * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
[THYMELEAF] * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
[THYMELEAF] * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
[THYMELEAF] * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
[THYMELEAF] * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
[THYMELEAF] * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
[THYMELEAF] * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
[THYMELEAF] * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
[THYMELEAF] * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
[THYMELEAF] * Text Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
[THYMELEAF] * Processors for Template Mode: CSS
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {th:insert}] [100]: org.thymeleaf.standard.processor.StandardInsertTagProcessor
[THYMELEAF] * [* {th:replace}] [100]: org.thymeleaf.standard.processor.StandardReplaceTagProcessor
[THYMELEAF] * [* {th:each}] [200]: org.thymeleaf.standard.processor.StandardEachTagProcessor
[THYMELEAF] * [* {th:switch}] [250]: org.thymeleaf.standard.processor.StandardSwitchTagProcessor
[THYMELEAF] * [* {th:case}] [275]: org.thymeleaf.standard.processor.StandardCaseTagProcessor
[THYMELEAF] * [* {th:if}] [300]: org.thymeleaf.standard.processor.StandardIfTagProcessor
[THYMELEAF] * [* {th:unless}] [400]: org.thymeleaf.standard.processor.StandardUnlessTagProcessor
[THYMELEAF] * [* {th:object}] [500]: org.thymeleaf.standard.processor.StandardObjectTagProcessor
[THYMELEAF] * [* {th:with}] [600]: org.thymeleaf.standard.processor.StandardWithTagProcessor
[THYMELEAF] * [* {th:inline}] [1000]: org.thymeleaf.standard.processor.StandardInlineTextualTagProcessor
[THYMELEAF] * [* {th:text}] [1300]: org.thymeleaf.standard.processor.StandardTextTagProcessor
[THYMELEAF] * [* {th:utext}] [1400]: org.thymeleaf.standard.processor.StandardUtextTagProcessor
[THYMELEAF] * [* {th:assert}] [1550]: org.thymeleaf.standard.processor.StandardAssertTagProcessor
[THYMELEAF] * [* {th:remove}] [1600]: org.thymeleaf.standard.processor.StandardRemoveTagProcessor
[THYMELEAF] * [* 100000] [org.thymeleaf.standard.processor.StandardBlockTagProcessor]: {}
[THYMELEAF] * [{th:block} *] [100000]: org.thymeleaf.standard.processor.StandardBlockTagProcessor
[THYMELEAF] * Text Processors by [precedence]:
[THYMELEAF] * [1000]: org.thymeleaf.standard.processor.StandardInliningTextProcessor
[THYMELEAF] * Expression Objects:
[THYMELEAF] * #ctx
[THYMELEAF] * #root
[THYMELEAF] * #vars
[THYMELEAF] * #object
[THYMELEAF] * #locale
[THYMELEAF] * #conversions
[THYMELEAF] * #uris
[THYMELEAF] * #temporals
[THYMELEAF] * #calendars
[THYMELEAF] * #dates
[THYMELEAF] * #bools
[THYMELEAF] * #numbers
[THYMELEAF] * #objects
[THYMELEAF] * #strings
[THYMELEAF] * #arrays
[THYMELEAF] * #lists
[THYMELEAF] * #sets
[THYMELEAF] * #maps
[THYMELEAF] * #aggregates
[THYMELEAF] * #messages
[THYMELEAF] * #ids
[THYMELEAF] * #execInfo
[THYMELEAF] * #request
[THYMELEAF] * #response
[THYMELEAF] * #session
[THYMELEAF] * #servletContext
[THYMELEAF] * #fields
[THYMELEAF] * #themes
[THYMELEAF] * #mvc
[THYMELEAF] * #requestdatavalues
[THYMELEAF] * Execution Attributes:
[THYMELEAF] * "StandardExpressionParser": Standard Expression Parser
[THYMELEAF] * "StandardJavaScriptSerializer": org.thymeleaf.standard.serializer.StandardJavaScriptSerializer@3fb7a38
[THYMELEAF] * "StandardCSSSerializer": org.thymeleaf.standard.serializer.StandardCSSSerializer@b981499c
[THYMELEAF] * "EnableSpringELCompiler": false
[THYMELEAF] * "StandardVariableExpressionEvaluator": SpringEL
[THYMELEAF] * "StandardConversionService": org.thymeleaf.spring6.expression.SpringStandardConversionService@5556306f
[THYMELEAF] * Dialect [2 of 2]: Layout (nz.net.ultraq.thymeleaf.layoutdialect.LayoutDialect)
[THYMELEAF] * Prefix: "layout"
[THYMELEAF] * Processors for Template Mode: HTML
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {layout:title-pattern,data-layout-title-pattern}] [1]: nz.net.ultraq.thymeleaf.layoutdialect.decorators.TitlePatternProcessor
[THYMELEAF] * [* {layout:collect,data-layout-collect}] [1]: nz.net.ultraq.thymeleaf.layoutdialect.fragments.CollectFragmentProcessor
[THYMELEAF] * [* {layout:fragment,data-layout-fragment}] [1]: nz.net.ultraq.thymeleaf.layoutdialect.fragments.FragmentProcessor
[THYMELEAF] * [* {xmlns:layout}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
[THYMELEAF] * Element Model Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {layout:decorate,data-layout-decorate}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.decorators.DecorateProcessor
[THYMELEAF] * [* {layout:include,data-layout-include}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.IncludeProcessor
[THYMELEAF] * [* {layout:insert,data-layout-insert}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.InsertProcessor
[THYMELEAF] * [* {layout:replace,data-layout-replace}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.ReplaceProcessor
[THYMELEAF] * Processors for Template Mode: XML
[THYMELEAF] * Element Tag Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {layout:collect}] [1]: nz.net.ultraq.thymeleaf.layoutdialect.fragments.CollectFragmentProcessor
[THYMELEAF] * [* {layout:fragment}] [1]: nz.net.ultraq.thymeleaf.layoutdialect.fragments.FragmentProcessor
[THYMELEAF] * [* {xmlns:layout}] [1000]: org.thymeleaf.standard.processor.StandardXmlNsTagProcessor
[THYMELEAF] * Element Model Processors by [matching element and attribute name] [precedence]:
[THYMELEAF] * [* {layout:decorate}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.decorators.DecorateProcessor
[THYMELEAF] * [* {layout:include}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.IncludeProcessor
[THYMELEAF] * [* {layout:insert}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.InsertProcessor
[THYMELEAF] * [* {layout:replace}] [0]: nz.net.ultraq.thymeleaf.layoutdialect.includes.ReplaceProcessor
[THYMELEAF] TEMPLATE ENGINE CONFIGURED OK
21:40:32.544 [http-nio-8080-exec-1] DEBUG org.thymeleaf.TemplateEngine - [THYMELEAF] TEMPLATE ENGINE INITIALIZED
21:40:33.074 [http-nio-8080-exec-1] WARN nz.net.ultraq.thymeleaf.expressionprocessor.ExpressionProcessor - Fragment expression "layout/layout" is being wrapped as a Thymeleaf 3 fragment expression (~{...}) for backwards compatibility purposes. This wrapping will be dropped in the next major version of the expression processor, so please rewrite as a Thymeleaf 3 fragment expression to future-proof your code. See https://github.com/thymeleaf/thymeleaf/issues/451 for more information.
21:40:33.329 [http-nio-8080-exec-1] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-1][layout/layout] Deprecated unwrapped fragment expression "fragments/header :: header" found in template layout/layout, line 5, col 7. Please use the complete syntax of fragment expressions instead ("~{fragments/header :: header}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:33.362 [http-nio-8080-exec-1] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-1][layout/layout] Deprecated unwrapped fragment expression "fragments/navigation :: navigation" found in template layout/layout, line 23, col 10. Please use the complete syntax of fragment expressions instead ("~{fragments/navigation :: navigation}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:33.782 [http-nio-8080-exec-1] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-1][layout/layout] Deprecated unwrapped fragment expression "fragments/sidebar :: sidebar" found in template layout/layout, line 25, col 10. Please use the complete syntax of fragment expressions instead ("~{fragments/sidebar :: sidebar}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:33.818 [http-nio-8080-exec-1] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-1][layout/layout] Deprecated unwrapped fragment expression "fragments/footer :: footer" found in template layout/layout, line 29, col 14. Please use the complete syntax of fragment expressions instead ("~{fragments/footer :: footer}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:33.833 [http-nio-8080-exec-1] DEBUG org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor - Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
21:40:33.834 [http-nio-8080-exec-1] DEBUG org.springframework.web.servlet.DispatcherServlet - Completed 200 OK
21:40:37.390 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.DispatcherServlet - GET "/dashboard", parameters={}
21:40:37.390 [http-nio-8080-exec-3] DEBUG org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped to sg.gov.lta.fs.skms.samm.web.controller.DashboardController#dashboard()
21:40:37.390 [http-nio-8080-exec-3] DEBUG org.springframework.orm.jpa.support.OpenEntityManagerInViewInterceptor - Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
21:40:37.429 [http-nio-8080-exec-3] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-3][layout/layout] Deprecated unwrapped fragment expression "fragments/header :: header" found in template layout/layout, line 5, col 7. Please use the complete syntax of fragment expressions instead ("~{fragments/header :: header}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:37.434 [http-nio-8080-exec-3] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-3][layout/layout] Deprecated unwrapped fragment expression "fragments/navigation :: navigation" found in template layout/layout, line 23, col 10. Please use the complete syntax of fragment expressions instead ("~{fragments/navigation :: navigation}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:37.437 [http-nio-8080-exec-3] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-3][layout/layout] Deprecated unwrapped fragment expression "fragments/sidebar :: sidebar" found in template layout/layout, line 25, col 10. Please use the complete syntax of fragment expressions instead ("~{fragments/sidebar :: sidebar}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
21:40:37.447 [http-nio-8080-exec-3] WARN org.thymeleaf.standard.processor.AbstractStandardFragmentInsertionTagProcessor - [THYMELEAF][http-nio-8080-exec-3][layout/layout] Deprecated unwrapped fragment expression "fragments/footer :: footer" found in template layout/layout, line 29, col 14. Please use the complete syntax of fragment expressions instead ("~{fragments/footer :: footer}"). The old, unwrapped syntax for fragment expressions will be removed in future versions of Thymeleaf.
经过多方查找原因,费尽周折,终于发现了Thymeleaf 2升级到Tymeleaf 3之中的细微差别导致了Layout Dialect无法正常显示。
参考Thymeleaf Layout Dialect – Migrating to 3.0 和 Thymeleaf stopped resolving layout templates after migrating to Thymeleaf 3。
在Tymeleaf 3中,decorator 处理器已经被删除了,所以Thymeleaf页面中的layout:decorator
无法被正常处理。需要修改为能够正常处理的layout:decorate
。
进行如下修改:
旧的含有无法被正常处理的layout:decorator
如下:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorator="layout/layout">
修改为以下:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="layout/layout">
以上
Thymeleaf 2升级到Tymeleaf 3导致Layout不起作用的问题完美解决!
参考
Thymeleaf Layout Dialect – Migrating to 3.0
Thymeleaf stopped resolving layout templates after migrating to Thymeleaf 3