废话少说直接上代码
声明方言
import java.util.HashSet;
import java.util.Set;
import org.springframework.stereotype.Component;
import org.thymeleaf.dialect.AbstractDialect;
import org.thymeleaf.processor.IProcessor;
/**
* _声明方言
* @author sly
* @time 2019年1月24日
*/
@Component
public class MyTagDialect extends AbstractDialect{
private static final String PREFIX = "mytag";
@Override
public Set<IProcessor> getProcessors() {
System.out.println("111");
Set<IProcessor> processors = new HashSet<IProcessor>();
processors.add(new MyTagProcessor());
return processors;
}
@Override
public String getPrefix() {
return PREFIX;
}
}
创建处理器
import org.springframework.stereotype.Component;
import org.thymeleaf.Arguments;
import org.thymeleaf.dom.Element;
import org.thymeleaf.processor.element.AbstractConditionalVisibilityElementProcessor;
/**
* _处理器
*
* @author sly
* @time 2019年1月24日
*/
@Component
public class MyTagProcessor extends AbstractConditionalVisibilityElementProcessor {
private static final int PRECEDENCE = 1000;
private static final String TAG_NAME = "mytag";
public MyTagProcessor() {
super(TAG_NAME);
}
@Override
public int getPrecedence() {
return PRECEDENCE;
}
@Override
protected boolean isVisible(Arguments arguments, Element element) {
System.out.println("isVisible");
String value = element.getAttributeValue("url");
System.out.println(value);
return true;
}
@Override
protected boolean removeHostElementIfVisible(Arguments arguments, Element element) {
System.out.println("removeHostElementIfVisible");
return false;
}
}
这个是控制可见性的处理器,如果isVisible方法返回true即可见,返回false即不可见, removeHostElementIfVisible返回true会去除标签体,返回false不会去除标签体.
页面使用方式:
<MyTag:mytag url="/haha">
<button>haha</button>
</MyTag:mytag>
如果要获取session信息需要在处理器isVisible()里加上如下代码
HttpServletRequest request = ((SpringWebContext) arguments.getContext()).getHttpServletRequest();
后面怎么弄我就不细说了
GitHub地址:地址