thymeleaf自定义标签

thymeleaf自定义标签

1、 导入pom文件

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

2、 注入Bean

/**
 * @author : fzz
 */
@Component
public class DialectConfig {
    @Bean
    public Dialect getDialect(){
        return new Dialect();
    }
}

3、 标签添加类

/**
 * @author : fzz
 */
public class Dialect extends AbstractProcessorDialect {
    private final static String NAME = "tag";
    public Dialect() {
        super(NAME, null, StandardDialect.PROCESSOR_PRECEDENCE);
    }

    @Override
    public Set<IProcessor> getProcessors(String dialectPrefix) {
        return createStandardProcessorsSet(dialectPrefix);
    }

    private Set<IProcessor> createStandardProcessorsSet(String dialectPrefix) {
        LinkedHashSet<IProcessor> processors = new LinkedHashSet<IProcessor>();
        //添加自定义标签处理器,可添加多个
        processors.add(new ImgLable(dialectPrefix));
        return processors;
    }
}

4、 自定义标签类

/**
 * @author : fzz
 */

public class ImgLable extends AbstractElementTagProcessor {
    private static final HashMap<String , String[]> map = new HashMap<>(2);
    static{
        map.put("icon",new String[]{"-","+",""});
        map.put("report",new String[]{"reduce","plus",""});
    }
    /**
     * 这里的属性可以根据自己需要添加
     */
    //自定义标签名
    private static final String TAG_NAME = "imgs";
    //自定义标签需要处理的属性
    private static final String VALUE = "value";
    //自定义标签需要处理的class
    private static final String ClASS = "class";
    //自定义标签需要处理的属性
    private static final String MARK = "mark";
    //优先级,thymeleaf内部方言优先
    private static final int PRECEDENCE = 70000;

    public ImgLable(String dialectPrefix) {
        super(TemplateMode.HTML, dialectPrefix, TAG_NAME, true, null, false, PRECEDENCE);
    }

    @Override
    //这个方法主要实现标签的作用,以及生成后的标签
    protected void doProcess(ITemplateContext context, IProcessableElementTag tag, IElementTagStructureHandler handler) {
        IAttribute value = tag.getAttribute(VALUE);
        IAttribute clazz = tag.getAttribute(ClASS);
        IAttribute key = tag.getAttribute(MARK);
        int icon = 0;
        if (!StringUtils.isEmpty(value.getValue().trim())){
            icon = Integer.parseInt(value.getValue());
        }
        String clas = "";
        if (clazz!=null) clas = String.valueOf(clazz.getValue());
        StringBuffer tagValue = new StringBuffer(" <img ");
        //  标签是否存在class
        if (!StringUtils.isEmpty(clas.trim()))
            tagValue.append(" class="+clas);
        tagValue.append(" src=\"/static/images/");
        //  标签是否是icon
        if (key.getValue().equals("icon"))
            tagValue.append("icon_");
        char ch = (char)('A' + (icon-1)/3);
        tagValue.append(ch);
        String[] str = map.get(key.getValue());
        tagValue.append(str[icon%3]);
        tagValue.append(".png\">");
        handler.replaceWith(tagValue, false);
    }
}

5、 html页面标签的使用

<div><imgs value="1" class="" mark="icon" alt="" title=""></div>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值