本文介绍自定义标签,使用的环境为,

spring-boot-starter-parent 版本为  1.5.10.RELEASE   使用的 Thymeleaf 的版本是 3.0.9.RELEASE

如果使用的  spring-boot-starter-parent 为 2.0 以上 则使用 Thymeleaf 的版本则是4以上

按照上面版本的说明,首先先把Thymeleaf 的版本进行升级

注意一定需要升级,不然会报错,下面是依赖

            <dependency><groupId>net.sourceforge.nekohtml</groupId><artifactId>nekohtml</artifactId><version>${nekohtml.version}</version></dependency><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring4</artifactId><version>${thymeleaf.version}</version></dependency><dependency><groupId>nz.net.ultraq.thymeleaf</groupId><artifactId>thymeleaf-layout-dialect</artifactId><version>${thymeleaf-layout-dialect.version}</version></dependency><thymeleaf.version>3.0.9.RELEASE</thymeleaf.version><thymeleaf-layout-dialect.version>2.3.0</thymeleaf-layout-dialect.version><nekohtml.version>1.9.22</nekohtml.version>

首先进行配置,配置在页面导入的 名称空间的 标签前缀

创建一个类并且继承  AbstractProcessorDialect 该类 ,该类是一个默认的方言处理器,重写下面的 构造函数和方法

/*** 系统方言*/
public class SysDialect  extends AbstractProcessorDialect {// 定义方言名称private static final String DIALECT_NAME = "Sys Dialect";/*** 构造函数*/public SysDialect() {// 设置自定义方言与“方言处理器”优先级相同/** DIALECT_NAME : 表示 设置的方言的名称* sys : 表示在页面使用的标签的名称  是在名称空间中声明的 部分* */super(DIALECT_NAME, "thSys", StandardDialect.PROCESSOR_PRECEDENCE);}@Overridepublic Set<IProcessor> getProcessors(String dialectPrefix) {Set<IProcessor> processors = new HashSet<IProcessor>();// 添加自定义标签processors.add(new SysDictTagProcessor(dialectPrefix));processors.add(new StandardXmlNsTagProcessor(TemplateMode.HTML, dialectPrefix));return processors;}
}

设置完成之后,下面开始创建,名称空间前缀 调用的 具体的标签名称和功能

创建一个类,继承  AbstractElementTagProcessor ,标签元素处理器 ,该类也需要重写构造函数和具体的方法

/*** 创建标签  具体的 标签*/
public class SysDictTagProcessor extends AbstractElementTagProcessor {// 标签名private static final String TAG_NAME = "dict";// 优先级private static final int PRECEDENCE = 10000;public SysDictTagProcessor(String dialectPrefix) {super(// 此处理器将仅应用于HTML模式TemplateMode.HTML,// 要应用于名称的匹配前缀dialectPrefix,// 标签名称:匹配此名称的特定标签 该内容就是在使用名称空间调用的 标签TAG_NAME,// 将标签前缀应用于标签名称true,// 无属性名称:将通过标签名称匹配null,// 没有要应用于属性名称的前缀false,// 优先(内部方言自己的优先)PRECEDENCE);}@Overrideprotected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTagiProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) {// 首先 引入 server 进行数据的查询,但是在引入bena 的时候,会报错,因为当前类不是server类,所以需要
//        创建类,然后使用上下文,获取相应的benaApplicationContext applicationContext = SpringContextUtils.getApplicationContext(iTemplateContext);DictService dictService = applicationContext.getBean(DubboUtils.class).getDictService();//  获取前端页面传递的属性String type = iProcessableElementTag.getAttributeValue("type");String name = iProcessableElementTag.getAttributeValue("name");String classStyle = iProcessableElementTag.getAttributeValue("class");// 进行数据的查询 根据 type 查询List<Dict> dictByType = dictService.getDictByType(type);if(dictByType != null && dictByType.size() >0){// 创建标签IModelFactory modelFactory = iTemplateContext.getModelFactory();IModel model = modelFactory.createModel();model.add(modelFactory.createOpenElementTag(String.format("select name='%s' class='%s'",name,classStyle)));for (Dict dict : dictByType) {model.add(modelFactory.createOpenElementTag(String.format("option value='%s'",dict.getValue())));model.add(modelFactory.createText(dict.getLabel()));model.add(modelFactory.createCloseElementTag("option"));}model.add(modelFactory.createCloseElementTag("select"));iElementTagStructureHandler.replaceWith(model,false);}}
}

可以将具体的功能,在  doProcess 方法中写,并最后将标签进行替换

在页面中使用,本案例是在html页面中使用

首先导入名称空间

导入之后,在需要使用的位置调用该标签即可

具体的属性可以在后端直接获取到

Thymeleaf 自定义标签相关推荐

  1. thymeleaf自定义标签

    前言 使用thymeleaf自定义标签,环境:springboot 2.3.7 + thymeleaf 3.0.11(2021-01-14最新版) 由于使用shiro,我们需要与thymeleaf整合 ...

  2. spring thymeleaf 自定义标签

    概述 thymeleaf2.1.5自定义标签及自定义属性案例,类似于JSP中的自定义JSTL标签 详细 代码下载:http://www.demodashi.com/demo/10495.html 一. ...

  3. thymeleaf 自定义标签属性

    与自定标签类似,只是继承的类不相同,自定义属性继承AbstractAttributeTagProcessor 1.标签注册类,与上篇的注册类一样,这里不再赘述,可翻阅本博客的"自定义标签&q ...

  4. springboot+thymeleaf自定义select标签

    效果 <sys:dict type="DISEASES_OPTION" name="option_code" class="" /&g ...

  5. javaweb学习总结(二十三)——jsp自定义标签开发入门

    一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...

  6. [PHP] JQuery+Layer实现添加删除自定义标签代码

    JQuery+Layer实现添加删除自定义标签代码 实现效果如下: 实现代码如下: <!doctype html> <html> <head> <meta c ...

  7. JSP自定义标签rtexprvalue属性

    rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否可以使用JSP表达式.(比如EL表达式或OGNL表达式). 当在<attribute>标 ...

  8. velocity自定义标签和指令

    velocity本身支持自定义标签和指令的扩展, 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用,而以井号 # 开头的语句则为 Velocity 的指令(Direct ...

  9. java中velocity定义宏标签_velocity自定义标签和指令(转:zwj)

    velocity本身支持自定义标签和指令的扩展,我们看看扩展指令的步骤及searchweb2的应用场景, 1.使用方法 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用 ...

最新文章

  1. python的assert作用
  2. 如何对软件项目团队成员进行角色和岗位的划分
  3. Docker初识之Centos6.2下安装Docker容器
  4. uva11111 Generalized Matrioshkas
  5. ASP.NET Core 运行原理剖析
  6. vue 生命周期_Vue生命周期小白看了都会的
  7. 兰州交通大学计算机科学与技术排名,兰州交通大学怎么样 全国排名是多少
  8. php ob gzhandler,php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
  9. 孤岛惊魂4服务器稳定吗,《孤岛惊魂5》究竟好不好玩 让我来告诉你(缺点)
  10. c实现一个简单的线性反馈移位寄存器LFSR
  11. 安利4款良心的时间轴软件,建议收藏!
  12. struts1.x 升级到struts2的几点问题
  13. vue生命周期(简短精干篇)
  14. 分布式系统的知识点-架构设计
  15. 2014522420145238 《信息安全系统设计基础》 第五次实验
  16. Python 绘制五角星 【初识Python】
  17. unzip和zip指令的使用方法
  18. 技术人如何打造个人品牌,提高身价?
  19. jQuery实现网页右下角弹出广告
  20. 鸿蒙系统开发工具DevEco Studio 2.2下载/安装教程

热门文章

  1. 环境变量Path和classpath的作用是什么?
  2. python机器学习minimize函数参数介绍及作用
  3. 小目标检测论文笔记:Learning Calibrated-Guidance for Object Detection in Aerial Images
  4. 微积微发之query操作checkbox选中
  5. java登塔小游戏,是男人就上一百层
  6. 【java】jdb调试java代码
  7. Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service
  8. 第一范式,第二范式,第三范式,BCNF的理解
  9. Java中的过滤器Filter
  10. 如何学习一门新的语言