概述
前言
有时候我们需要实现一些自定义的页面标签,比如实现精确到按钮级的权限控制,你需要在没有权限时将页面相关按钮隐藏.这时就可以依靠自定义标签来解决,当然也可以利用一些现有的开源框架解决.我这里使用前者,因为比较轻量化.
申明方言
springboot2与springboot不一样了,你需要这样,当然不完全是这样.springboot2中的接口类别比较多,根据不同的情况选择实现哪个.
import java.util.HashSet;
import java.util.Set;
import org.springframework.stereotype.Component;
import org.thymeleaf.dialect.AbstractProcessorDialect;
import org.thymeleaf.dialect.IProcessorDialect;
import org.thymeleaf.processor.IProcessor;
import org.thymeleaf.standard.StandardDialect;
/**
* _声明方言
* @author sly
* @time 2019年1月24日
*/
@Component
public class MyTagDialect extends AbstractProcessorDialect implements IProcessorDialect {
private static final String PREFIX = "mt";
public MyTagDialect() {
super("My tag", PREFIX, StandardDialect.PROCESSOR_PRECEDENCE);
}
@Override
public Set<IProcessor> getProcessors(String dialectPrefix) {
Set<IProcessor> processors = new HashSet<IProcessor>();
processors.add(new MyTagProcessor(PREFIX));
return processors;
}
}
实现处理器
处理器是用来处理标签的,这里我处理的是MyTag标签,当标签内的url等于"/haha"时不显示该元素,如果用来做权限控制的话,这里要判断标签url是否是在用户权限中,不在就移除标签及其内容,权限在用户权限中就移除标签不移除内容.
package com.sly.demo.thymeleaf.tag;
import javax.servlet.http.HttpServletRequest;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.context.WebEngineContext;
import org.thymeleaf.model.IAttribute;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.templatemode.TemplateMode;
/**
* _处理器
* @author sly
* @time 2019年1月24日
*/
public class MyTagProcessor extends AbstractElementTagProcessor {
private static final int PRECEDENCE = 10000;
private static final String TAG_NAME = "MyTag";
public MyTagProcessor(String dialectPrefix) {
super(
// 此处理器将仅应用于HTML模式
TemplateMode.HTML,
// 要应用于名称的匹配前缀
dialectPrefix,
// 标签名称:匹配此名称的特定标签
TAG_NAME,
// 没有要应用于标签名称的前缀
false,
// 无属性名称:将通过标签名称匹配
null,
// 没有要应用于属性名称的前缀
false,
// 优先(内部方言自己的优先)
PRECEDENCE);
}
@Override
protected void doProcess(ITemplateContext context, IProcessableElementTag tag,
IElementTagStructureHandler structureHandler) {
//获取元素名称
System.out.println(tag.getElementCompleteName());
WebEngineContext context2 = (WebEngineContext)context;
HttpServletRequest request = context2.getRequest();
System.out.println("用户:" + request.getSession().getAttribute("username"));
IAttribute url = tag.getAttribute("url");
System.out.println("匹配上:" + url.getValue());
if (url.getValue().equals("/haha")) {
structureHandler.removeElement();
} else {
structureHandler.removeTags();
}
}
}
结果
页面上第一个标签没有,第二个标签存在.使用版本为springboot 2.0.6.RELEASE
最后
以上就是沉静雪碧为你收集整理的springboot2+thymeleaf3.0自定义标签的全部内容,希望文章能够帮你解决springboot2+thymeleaf3.0自定义标签所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复