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>