SpringBoot(十)使用Thymeleaf3.0自定义标签

###前言
spring boot、thymeleaf环境下,通常有一些页面转义时,可以通过自定义标签将code转成描述。

1、申明自定义标签

import org.springframework.stereotype.Component;
import org.thymeleaf.dialect.AbstractDialect;
import org.thymeleaf.processor.IProcessor;
import java.util.HashSet;
import java.util.Set;
@Component
public class CrmDialect extends AbstractDialect {
    @Override
    public String getPrefix() {
        return "crm";
    }
    @Override
    public Set getProcessors() {
        final Set processors = new HashSet<>();
        processors.add(new FragmentElementProcessor());
        return processors;
    }
}
import com.google.common.base.Strings;
import org.springframework.stereotype.Component;
import org.thymeleaf.Arguments;
import org.thymeleaf.dom.Element;
import org.thymeleaf.dom.Node;
import org.thymeleaf.dom.Text;
import org.thymeleaf.processor.element.AbstractMarkupSubstitutionElementProcessor;

import java.util.ArrayList;
import java.util.List;

@Component
public class FragmentElementProcessor extends AbstractMarkupSubstitutionElementProcessor {

    public FragmentElementProcessor() {
        super("subject");
    }

    @Override
    protected List getMarkupSubstitutes(Arguments arguments, Element element) {
        //获取标签name属性的值
        String value = element.getAttributeValue("value");
        List nodes = null;

        if(!Strings.isNullOrEmpty(value)){
            //如果name属性的值为none,则在自定义标签下的内容前插入标签:无信息
            Element h2 = new Element("span");
            h2.setAttribute("style", "color:red");
            h2.addChild(new Text("转义"));
            element.insertChild(0, h2);
            nodes = element.getChildren();
        } else {
            //如果name属性不为none,则移除自定义标签下的内容,插入
hello name
nodes = new ArrayList<>(); } return nodes; } @Override public int getPrecedence() { return 1000; } }

springboot默认使用thymeleaf引擎,所以不需要在配置文件中注册自定义标签,仅需要将自定义标签类添加入spring容器即可。例如添加@Component注解。
###2、用法


3、效果

转义

你可能感兴趣的:(spring,boot)