1. 程式人生 > >thymeleaf自定義標簽方言處理

thymeleaf自定義標簽方言處理

del 使用 sta etag 鏈接 see bsp tom execute

項目背景:springboot+thymeleaf

thymeleaf兩種方式處理自定義標簽:AbstractAttributeTagProcessor 和 AbstractElementTagProcessor

一、AbstractAttributeTagProcessor :

1. 定義dialog

package com.spt.im.web.config;

import java.util.HashSet;
import java.util.Set;

import org.springframework.beans.factory.annotation.Value;
import
org.thymeleaf.dialect.AbstractProcessorDialect; import org.thymeleaf.processor.IProcessor; public class CustomDialect extends AbstractProcessorDialect{ private static final String DIALECT_NAME = "staticFile"; private static final String PREFIX = "W"; public static final int PROCESSOR_PRECEDENCE = 1000; @Value(
"${im.static.resources}") private String filePath; protected CustomDialect() { super(DIALECT_NAME, PREFIX, PROCESSOR_PRECEDENCE); } @Override public Set<IProcessor> getProcessors(String dialectPrefix) { final Set<IProcessor> processors = new HashSet<IProcessor>(); processors.add(
new SampleJsTagProcessor(dialectPrefix, filePath)); processors.add(new SampleCssTagProcessor(dialectPrefix, filePath)); processors.add(new SampleSrcTagProcessor(dialectPrefix, filePath)); return processors; } }

2. 定義處理器

package com.spt.im.web.config;

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;

public class SampleJsTagProcessor extends AbstractAttributeTagProcessor{
    
     private static final String ATTR_NAME = "js";
     private static final String ELE_NAME = "script";
     private static final int PRECEDENCE = 10000;
     private String filePath;

    protected SampleJsTagProcessor(String dialectPrefix, String filePath) {
         super(
                TemplateMode.HTML, 
                dialectPrefix,     
                ELE_NAME,             
                false,             
                ATTR_NAME,         
                true,              
                PRECEDENCE,       
                true); 
         this.filePath = filePath;
    }

    @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 url = (String) expression.execute(context);
        structureHandler.setAttribute("src", filePath + url);
    }

}

3. 添加到配置中

package com.spt.im.web.config;

import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WorkImport {

    @Bean
    public CustomDialect testDialect(){
        return new CustomDialect();
    }
}

4. 頁面中使用

<script W:js="@{/static/js/pinyin.js}" type="text/javascript"></script>

OK,完畢,項目運行,上述標簽會被替換成相應的鏈接。

二、AbstractElementTagProcessor 待測試補充。。

thymeleaf自定義標簽方言處理