這篇文章將為大家詳細(xì)講解有關(guān)Thymeleaf2遷移到Thymeleaf3的示例分析,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、外貿(mào)網(wǎng)站建設(shè)負(fù)責(zé)任的成都網(wǎng)站制作公司!
十分鐘遷移到Thymeleaf 3
如果你是打算從Thymeleaf2遷移到Thymeleaf3的用戶。首先,一個(gè)好消息是你當(dāng)前的Thymeleaf模板與Thymeleaf3完全兼容。所以,如果要進(jìn)行遷移,你只要做一些配置上的修改。
Thymeleaf 3.0 BETA版本是穩(wěn)定且完全覆蓋2.1版本的特性,所以,推薦你進(jìn)行升級(jí)。因?yàn)樾掳姹镜男阅芨枚矣性S多新的特性。
唯一的問題是,不是所有的Thymeleaf方言(dialect)都遷移到了Thymeleaf 3中。因此,在遷移前要做好這方面的兼容性檢查。
下面來介紹一下Thymeleaf 3中的一些變化和特性。
唯一的變化是,推薦你去掉模板中的 th:inline=“text”屬性。因?yàn)樵贖TML或XML模板中,不再需要該屬性去支持文本中內(nèi)聯(lián)表達(dá)式的特性。當(dāng)然,只是推薦你去去掉該屬性,不去掉,你原來模板一樣可以工作。去掉的好處是會(huì)給你帶來執(zhí)行性能方面的提升。
詳細(xì)信息可參見下文的 內(nèi)聯(lián)機(jī)制部分。
看一個(gè)thymeleaf-spring4集成的配置文件例子。
首先你需要更新Maven依賴
<dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf</artifactId> <version>3.0.0.BETA02</version></dependency><dependency> <groupId>org.thymeleaf</groupId> <artifactId>thymeleaf-spring4</artifactId> <version>3.0.0.BETA02</version></dependency>
然后是spring 配置
@Configuration@EnableWebMvc@ComponentScan("com.thymeleafexamples") public class ThymeleafConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { private ApplicationContext applicationContext; public void setApplicationContext(ApplicationContext applicationContext) { this.applicationContext = applicationContext; } @Bean public ViewResolver viewResolver() { ThymeleafViewResolver resolver = new ThymeleafViewResolver(); resolver.setTemplateEngine(templateEngine()); resolver.setCharacterEncoding("UTF-8"); return resolver; } private TemplateEngine templateEngine() { SpringTemplateEngine engine = new SpringTemplateEngine(); engine.setTemplateResolver(templateResolver()); return engine; } private ITemplateResolver templateResolver() { SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); resolver.setApplicationContext(applicationContext); resolver.setPrefix("/WEB-INF/templates/"); resolver.setTemplateMode(TemplateMode.HTML); return resolver; }}
與Thymeleaf 2相比,第一個(gè)區(qū)別是,現(xiàn)在推薦的模板解析類是 SpringResourceTemplateResolver。該類依賴于 Spring的ApplicationContext 上下文。因此,你的配置類需要實(shí)現(xiàn) ApplicationContextAware 接口。
第二個(gè)區(qū)別是。提供了TemplateMode.HTML 枚舉常量。模板類型的方法參數(shù)不再是string類型的。
如果你需要添加其他方言,可以通過engine.addDialect(…)方法,當(dāng)然你需要先確認(rèn)Thymeleaf 3是否支持。
你可以到官方下載一些集成配置的例子。
Thymeleaf 3 + Spring 4 + Java config example
Thymeleaf 3 + Spring 4 + XML config example
Thymeleaf 3 + Servlet 3 example
Thymeleaf 3.0 不再是基于XML結(jié)構(gòu)的。由于引入新的解析引擎,模板的內(nèi)容格式不再需要嚴(yán)格遵守XML規(guī)范。即不在要求標(biāo)簽閉合,屬性加引號(hào)等等。當(dāng)然,出于易讀性考慮,還是推薦你按找XML的標(biāo)準(zhǔn)去編寫模板。
下面的代碼在Thymeleaf 3.0里是合法的:
<p><p th:text=${mytext} ng-app>Whatever
Thymeleaf 3 移除了之前版本的模板類型,新的模板類型為:
HTML
XML
TEXT
JAVASCRIPT
CSS
RAW
2個(gè)標(biāo)記型模板(HTML和XML),3個(gè)文本型模板(TEXT, JAVASCRIPT和CSS) 一個(gè)無操作(no-op)模板 (RAW)。
HTML模板支持包括HTML5,HTML4和XHTML在內(nèi)的所有類型的HTML標(biāo)記。且不會(huì)檢查標(biāo)記是否完整閉合。此時(shí),標(biāo)記的作用范圍按可能的最大化處理。
文本型模板使得Thymeleaf可以支持輸出CSS、Javascript和文本文件。在你想要在CSS或Javascript文件中使用服務(wù)端的變量時(shí);或者想要輸出純文本的內(nèi)容時(shí),比如,在郵件中,該特性是否有用。
在文本模式中使用Thymeleaf的特性,你需要使用一種新的語(yǔ)法,例如:
[# th:each="item : ${items}"] - [# th:utext="${item}" /][/]
現(xiàn)在可無需額外的標(biāo)簽,直接在文本中輸出數(shù)據(jù):
This product is called [[${product.name}]] and it's great!
詳見:Inlined output expressions 關(guān)于內(nèi)聯(lián)機(jī)制的討論: Refactoring of the inlining mechanism
Thymeleaf 3.0 引入了一個(gè)新的片段表達(dá)式。形如:~{commons::footer}。
該特性十分有用(真的是是否有用,直接解決了一直困擾我的定義通用的header和footer的問題)。直接看例子來理解一下該語(yǔ)法吧:
<head th:replace="base :: common_header(~{::title},~{::link})"> <title>Awesome - Main</title> <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"> <link rel="stylesheet" th:href="@{/themes/smoothness/jquery-ui.css}"></head>
這里,將兩外另個(gè)包含<title>和<link>標(biāo)簽的片段作為參數(shù)傳遞給了common_header片段,在common_header中使用如下:
head th:fragment="common_header(title,links)"> <title th:replace="${title}">The awesome application</title> <!-- Common styles and scripts --> <link rel="stylesheet" type="text/css" media="all" th:href="@{/css/awesomeapp.css}"> <link rel="shortcut icon" th:href="@{/images/favicon.ico}"> <script type="text/javascript" th:src="@{/sh/scripts/codebase.js}"></script> <!--/* Per-page placeholder for additional links */--> <th:block th:replace="${links}" /></head>
渲染出結(jié)果如下:
<head> <title>Awesome - Main</title> <!-- Common styles and scripts --> <link rel="stylesheet" type="text/css" media="all" href="/awe/css/awesomeapp.css"> <link rel="shortcut icon" href="/awe/images/favicon.ico"> <script type="text/javascript" src="/awe/sh/scripts/codebase.js"></script> <link rel="stylesheet" href="/awe/css/bootstrap.min.css"> <link rel="stylesheet" href="/awe/themes/smoothness/jquery-ui.css"></head>
6. 無操作標(biāo)記(token)
Thymeleaf 3.0 另一個(gè)新的特性就是無操作(NO-OP no-operation)標(biāo)記,下劃線”_”,代表什么也不做。
例如:
<span th:text="${user.name} ?: _">no user authenticated</span>
當(dāng)user.name 為空的時(shí)候,直接輸出標(biāo)簽體中的內(nèi)容:no user authenticated。該特性讓我們可以直接使用原型模板中的值作為默認(rèn)值。
該特性詳細(xì)資料參考: The NO-OP token
7 模板邏輯解耦
Thymeleaf 3.0 允許 HTML和XML模式下的模板內(nèi)容和控制邏輯完全解耦。
例如,在3.0版本里,一個(gè)“干凈”的home.html模板內(nèi)容如下:
<!DOCTYPE html><html> <body> <table id="usersTable"> <tr> <td class="username">Jeremy Grapefruit</td> <td class="usertype">Normal User</td> </tr> <tr> <td class="username">Alice Watermelon</td> <td class="usertype">Administrator</td> </tr> </table> </body></html>
我們只需額外定義一個(gè)home.th.xml文件,就可以把之前的home.html文件當(dāng)作Thymeleaf模板來使用,內(nèi)容如下:
<?xml version="1.0"?><thlogic> <attr sel="#usersTable" th:remove="all-but-first"> <attr sel="/tr[0]" th:each="user : ${users}"> <attr sel="td.username" th:text="${user.name}" /> <attr sel="td.usertype" th:text="#{|user.type.${user.type}|}" /> </attr> </attr></thlogic>
邏輯解耦時(shí),指定的屬性會(huì)在模本解析的過程中插入指定的位置。通過sel屬性指定選擇器。
邏輯解耦,意味著可以使用純HTML文件作為設(shè)計(jì)模板,允許設(shè)計(jì)人員不再需要具備Thymeleaf的相關(guān)知識(shí)。 詳細(xì)介紹: Decoupled Template Logic
8. 性能提升
除了之前提到的特性之外,Thymeleaf 3.0 的另外一個(gè)重要突破就是有明顯的性能提升。
2.1版本之前采用的基于XML的模板引擎,雖然有助于實(shí)現(xiàn)很多的特性,但是在有些情況下也造成了性能的損失。在絕大多數(shù)的項(xiàng)目里Thymeleaf的渲染時(shí)間是幾乎可以忽略不計(jì)的,這也就凸顯出來了Thymeleaf在某些特定情景下的性能問題。(例如:在高負(fù)載的網(wǎng)站中處理成千上萬行的表格)。
Thymeleaf 3 重點(diǎn)關(guān)注性能問題并完全重寫了引擎。因此與之前版本相比性能有很大的提升。而且,這種提升不僅僅局限于渲染時(shí)間,也包括更低的內(nèi)存占用以及在高并發(fā)場(chǎng)景下的低延遲。
關(guān)于Thymeleaf 3 技術(shù)架構(gòu)的討論可參見: New event-based template processing engine
值得一提的是,性能提升不僅是架構(gòu)層面的事,也包括3.0 版本里的一些有助于性能提升的新特性。例如,在3.0版本里使用SpringEL表達(dá)式的編譯器(從Spring Framework4.2.4版本開始),在使用Spring的場(chǎng)景下,可進(jìn)一步的提升性能。具體參見: Configuring the SpringEL compiler
即使沒有使用Spring而是使用OGNL表達(dá)式,在3.0版本里也有性能優(yōu)化。Thymeleaf甚至給OGNL代碼庫(kù)貢獻(xiàn)了很多源碼,這些代碼有助于提升Thymeleaf在新的MVC1.0(JSR371)標(biāo)準(zhǔn)環(huán)境下的性能。
9. 不依賴于Servlet API
其實(shí)Thymeleaf3.0 之前版本在離線執(zhí)行的情況下已經(jīng)做到了不依賴于Java Servlet API,就是說在執(zhí)行模板的過程中不依賴于Web容器。一個(gè)實(shí)用的場(chǎng)景就是用作郵件模板。
然而,在Thymeleaf3.0里做到了在Web環(huán)境下也完全不依賴Servlet API。這樣就使得與那些不依賴Java Servlet框架(如 vert.x, RatPack, Play Framework)的集成更加簡(jiǎn)單方便。
更多參見: New extension point: Link Builders和 Generalisation of the IEngineContext mechanism.
10. 新的方言系統(tǒng)
Thymeleaf 3 提供了新的方言系統(tǒng)。如果你在早期版本上開發(fā)了Thymeleaf的方言,你需要使其與Thymeleaf 3 兼容。
新的方言接口十分簡(jiǎn)單
public interface IDialect { public String getName(); }
可以通過實(shí)現(xiàn)IDialect的子類接口,實(shí)現(xiàn)更多不同的特性。
列舉一下新方言系統(tǒng)增強(qiáng)的點(diǎn):
除了processors之外,還提供了pre-processors 和 post-processors,模板的內(nèi)容可以在處理之前和之后被修改。例如,我們可以使用pre-processors來緩存內(nèi)容或者用post-processors來壓縮輸出結(jié)果。
提出了方言優(yōu)先級(jí)的概念,可以對(duì)方言的處理器(processor)進(jìn)行排序。處理器優(yōu)先級(jí)的排序是跨方言的。
對(duì)象表達(dá)式方言提供可以模本內(nèi)任意地方使用的新的表達(dá)式對(duì)象和工具對(duì)象。如:#strings, #numbers, #dates 等。
11 重構(gòu)了核心API
核心接口進(jìn)行了深度重構(gòu),詳見:
Refactoring of the Template Resolution API
Refactoring of the Context API
Refactoring of the Message Resolution API
12 總結(jié)
Thymeleaf 3 是Thymeleaf 模板引擎經(jīng)過4年多不懈的努力和工作后的一個(gè)重要的里程碑式的成果。提供了許多令人興奮的新特性以及許多隱藏的改進(jìn)。 所以,別再猶豫,趕緊來試試吧。
關(guān)于“Thymeleaf2遷移到Thymeleaf3的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
文章題目:Thymeleaf2遷移到Thymeleaf3的示例分析
網(wǎng)頁(yè)URL:http://muchs.cn/article26/igshcg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、企業(yè)網(wǎng)站制作、建站公司、定制網(wǎng)站、標(biāo)簽優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
營(yíng)銷型網(wǎng)站建設(shè)知識(shí)