摘要:最終還是決定用的自定義標(biāo)簽來解決這個(gè)問題。自定義標(biāo)簽處理器需要實(shí)現(xiàn)接口,標(biāo)簽的處理邏輯在方法中編寫。作者宋浩志創(chuàng)建時(shí)間年月日上午模板模式,這里使用模板。標(biāo)簽名是否要求前綴。自定義標(biāo)簽屬性名。標(biāo)簽處理的優(yōu)先級(jí),此處使用和標(biāo)準(zhǔn)方言相同的優(yōu)先級(jí)。
前言
最近一直在忙著寫自己的博客系統(tǒng),好久沒有發(fā)布新的文章,最近在查Thymeleaf的自定義標(biāo)簽發(fā)現(xiàn)文章極少,非常苦惱,簡(jiǎn)書的這篇解決了我的問題,于是引用一下他的文章(抄一下)
心路歷程我的博客的標(biāo)題我需要顯示出當(dāng)前在哪個(gè)頁面,如"后臺(tái)首頁-XX的博客","文章管理-XX的博客",如果說我把對(duì)象每個(gè)頁面都傳遞過去那肯定是沒有問題的,但是我并不想,于是就開始找解決辦法,最開始用攔截器解決,實(shí)現(xiàn)倒是可以實(shí)現(xiàn),就是ajax方法會(huì)報(bào)錯(cuò),雖然可以用,但是不夠優(yōu)雅;由于開始一直在寫博客后臺(tái),沒考慮首頁的問題,當(dāng)我放棄使用攔截器以后,我把我的map放到了session中,這樣登錄以后肯定也是所有頁面共享。再后來博客后臺(tái)寫的差不多了,準(zhǔn)備開始寫前臺(tái)首頁的時(shí)候發(fā)現(xiàn)這個(gè)方法也不對(duì),總之這次自己寫項(xiàng)目覺得不考慮清楚就寫最后就會(huì)各種不對(duì)勁,就一直在改。最終還是決定用Thymeleaf的自定義標(biāo)簽來解決這個(gè)問題。
代碼 html標(biāo)簽實(shí)現(xiàn)自定義標(biāo)簽處理器
新建一個(gè)java類 com.songhaozhi.mayday.config.thymeleaf.tag.ThSysTagProcessor.java
對(duì)于Thymeleaf方言,自定義標(biāo)簽的處理邏輯是在標(biāo)簽處理器定義的。
自定義標(biāo)簽處理器需要實(shí)現(xiàn)AbstractAttributeTagProcessor 接口,標(biāo)簽的處理邏輯在doProcess 方法中編寫。
package com.songhaozhi.mayday.config.thymeleaf.tag; import org.thymeleaf.IEngineConfiguration; import org.thymeleaf.context.ITemplateContext; import org.thymeleaf.engine.AttributeName; import org.thymeleaf.model.IProcessableElementTag; import org.thymeleaf.processor.element.AbstractAttributeTagProcessor; import org.thymeleaf.processor.element.IElementTagStructureHandler; import org.thymeleaf.standard.expression.IStandardExpression; import org.thymeleaf.standard.expression.IStandardExpressionParser; import org.thymeleaf.standard.expression.StandardExpressions; import org.thymeleaf.templatemode.TemplateMode; import com.songhaozhi.mayday.model.dto.MaydayConst; /** * @author 作者:宋浩志 * @createDate 創(chuàng)建時(shí)間:2018年12月17日 上午10:44:54 */ public class ThSysTagProcessor extends AbstractAttributeTagProcessor{ private static final String TEXT_ATTRIBUTE = "text"; private static final int PRECEDENCE = 10000; /*templateMode: 模板模式,這里使用HTML模板。 dialectPrefix: 標(biāo)簽前綴。即xxx:text中的xxx。在此例子中prefix為thSys。 elementName:匹配標(biāo)簽元素名。舉例來說如果是div,則我們的自定義標(biāo)簽只能用在div標(biāo)簽中。為null能夠匹配所有的標(biāo)簽。 prefixElementName: 標(biāo)簽名是否要求前綴。 attributeName: 自定義標(biāo)簽屬性名。這里為text。 prefixAttributeName:屬性名是否要求前綴,如果為true,Thymeeleaf會(huì)要求使用text屬性時(shí)必須加上前綴,即thSys:text。 precedence:標(biāo)簽處理的優(yōu)先級(jí),此處使用和Thymeleaf標(biāo)準(zhǔn)方言相同的優(yōu)先級(jí)。 removeAttribute:標(biāo)簽處理后是否移除自定義屬性。*/ public ThSysTagProcessor(String dialectPrefix) { super( TemplateMode.HTML, dialectPrefix, null, false, TEXT_ATTRIBUTE, true, PRECEDENCE, true); } @Override protected void doProcess(ITemplateContext context, IProcessableElementTag tag, AttributeName attributeName, String attributeValue, IElementTagStructureHandler structureHandler) { final IEngineConfiguration configuration = context.getConfiguration(); final IStandardExpressionParser parser = StandardExpressions.getExpressionParser(configuration); final IStandardExpression expression = parser.parseExpression(context, attributeValue); final String title = (String) expression.execute(context); structureHandler.setBody(title+MaydayConst.options.get("blog_name"),false); } }
其中的MaydayConst.options.get("blog_name")是我數(shù)據(jù)庫查出來緩存的map
定義方言類package com.songhaozhi.mayday.config.thymeleaf.dialect; import java.util.HashSet; import java.util.Set; import org.thymeleaf.dialect.AbstractProcessorDialect; import org.thymeleaf.processor.IProcessor; import org.thymeleaf.standard.StandardDialect; import org.thymeleaf.standard.processor.StandardXmlNsTagProcessor; import org.thymeleaf.templatemode.TemplateMode; import com.songhaozhi.mayday.config.thymeleaf.tag.ThSysTagProcessor; /** * 系統(tǒng)方言 * @author 宋浩志 * @createDate 創(chuàng)建時(shí)間:2018年12月4日 下午9:12:14 * */ public class ThSysDialect extends AbstractProcessorDialect{ //定義方言名稱 private static final String DIALECT_NAME="Sys Dialect"; public ThSysDialect() { //設(shè)置自定義方言與"方言處理器"優(yōu)先級(jí)相同 super(DIALECT_NAME, "thSys", StandardDialect.PROCESSOR_PRECEDENCE); } @Override public Set在SpringBoot中加載自定義方言getProcessors(String dialectPrefix) { Set processors=new HashSet (); processors.add(new ThSysTagProcessor(dialectPrefix)); processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix)); return processors; } }
com.songhaozhi.mayday.config.ThymeleafDialectConfig.java
package com.songhaozhi.mayday.config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.songhaozhi.mayday.config.thymeleaf.dialect.ThSysDialect; /** * Thymeleaf配置 * @author 宋浩志 * @createDate 創(chuàng)建時(shí)間:2018年12月4日 下午9:29:53 * */ @Configuration public class ThymeleafDialectConfig { @Bean public ThSysDialect thSysDialect() { return new ThSysDialect(); } }效果
其中"后臺(tái)登錄 - "是標(biāo)簽傳遞到后臺(tái)的,"張三的博客"是數(shù)據(jù)庫保存的值。
這就大功告成了!
代碼在我的博客項(xiàng)目里面 Mayday博客系統(tǒng) (還沒有寫完) 如果對(duì)你有幫助你給我一個(gè)star,非常感謝?。?!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72777.html
摘要:在使用上述模板,默認(rèn)從下加載。介紹是現(xiàn)代化服務(wù)器端的模板引擎,不同與其它幾種模板的是的語法更加接近,并且具有很高的擴(kuò)展性。特點(diǎn)支持無網(wǎng)絡(luò)環(huán)境下運(yùn)行,由于它支持原型,然后在標(biāo)簽里增加額外的屬性來達(dá)到模板數(shù)據(jù)的展示方式。 SpringBoot 是為了簡(jiǎn)化 Spring 應(yīng)用的創(chuàng)建、運(yùn)行、調(diào)試、部署等一系列問題而誕生的產(chǎn)物,自動(dòng)裝配的特性讓我們可以更好的關(guān)注業(yè)務(wù)本身而不是外部的XML配置,...
摘要:簡(jiǎn)介是個(gè)模板引擎,可以用于與非應(yīng)用的主要目標(biāo)在于提供一種可被瀏覽器正確顯示的格式良好的模板創(chuàng)建方式,因此也可以用作靜態(tài)建模的可擴(kuò)展性也非常棒。 1.Thymeleaf簡(jiǎn)介??Thymeleaf是個(gè)XML/XHTML/HTML5模板引擎,可以用于Web與非Web應(yīng)用 ??Thymeleaf的主要目標(biāo)在于提供一種可被瀏覽器正確顯示的、格式良好的模板創(chuàng)建方式,因此也可以用作靜態(tài)建模,Thym...
摘要:本次學(xué)習(xí)如何使用以及相關(guān)語法在上一章寫的那樣引入包到工程同理配置配置模板設(shè)置在需要引用添加引用頭下面記錄一下的模板語法和稍微有些出入不過好在不需要修改文件類型直接將進(jìn)行頭部引用就可以使用標(biāo)簽引入路徑或地址絕對(duì)路徑進(jìn)行訪問相對(duì)路徑進(jìn) 本次學(xué)習(xí)如何使用thymeleaf以及相關(guān)語法1、在上一章寫的那樣 引入jar包到maven工程 org.springframewor...
摘要:本次學(xué)習(xí)如何使用以及相關(guān)語法在上一章寫的那樣引入包到工程同理配置配置模板設(shè)置在需要引用添加引用頭下面記錄一下的模板語法和稍微有些出入不過好在不需要修改文件類型直接將進(jìn)行頭部引用就可以使用標(biāo)簽引入路徑或地址絕對(duì)路徑進(jìn)行訪問相對(duì)路徑進(jìn) 本次學(xué)習(xí)如何使用thymeleaf以及相關(guān)語法1、在上一章寫的那樣 引入jar包到maven工程 org.springframewor...
摘要:對(duì)應(yīng)的請(qǐng)求信息如下如果是其他客戶端請(qǐng)求,如測(cè)試,會(huì)默認(rèn)返回?cái)?shù)據(jù)在之前的文章中介紹過了的自動(dòng)配置機(jī)制,默認(rèn)錯(cuò)誤處理機(jī)制也是自動(dòng)配置其中的一部分。在這個(gè)包中加載了所有的自動(dòng)配置類,其中就是處理異常的機(jī)制。 ??在我們開發(fā)的過程中經(jīng)常會(huì)看到下圖這個(gè)界面,這是SpringBoot默認(rèn)出現(xiàn)異常之后給用戶拋出的異常處理界面。showImg(https://segmentfault.com/img/...
閱讀 2127·2021-09-29 09:35
閱讀 2005·2019-08-30 14:15
閱讀 3027·2019-08-30 10:56
閱讀 1016·2019-08-29 16:59
閱讀 635·2019-08-29 14:04
閱讀 1368·2019-08-29 12:30
閱讀 1088·2019-08-28 18:19
閱讀 563·2019-08-26 11:51