Thymeleaf 自定义标签
本文介绍自定义标签,使用的环境为,
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 自定义标签相关推荐
- thymeleaf自定义标签
前言 使用thymeleaf自定义标签,环境:springboot 2.3.7 + thymeleaf 3.0.11(2021-01-14最新版) 由于使用shiro,我们需要与thymeleaf整合 ...
- spring thymeleaf 自定义标签
概述 thymeleaf2.1.5自定义标签及自定义属性案例,类似于JSP中的自定义JSTL标签 详细 代码下载:http://www.demodashi.com/demo/10495.html 一. ...
- thymeleaf 自定义标签属性
与自定标签类似,只是继承的类不相同,自定义属性继承AbstractAttributeTagProcessor 1.标签注册类,与上篇的注册类一样,这里不再赘述,可翻阅本博客的"自定义标签&q ...
- springboot+thymeleaf自定义select标签
效果 <sys:dict type="DISEASES_OPTION" name="option_code" class="" /&g ...
- javaweb学习总结(二十三)——jsp自定义标签开发入门
一.自定义标签的作用 自定义标签主要用于移除Jsp页面中的java代码. 二.自定义标签开发和使用 2.1.自定义标签开发步骤 1.编写一个实现Tag接口的Java类(标签处理器类) 1 packag ...
- [PHP] JQuery+Layer实现添加删除自定义标签代码
JQuery+Layer实现添加删除自定义标签代码 实现效果如下: 实现代码如下: <!doctype html> <html> <head> <meta c ...
- JSP自定义标签rtexprvalue属性
rtexprvalue的全称是 Run-time Expression Value, 它用于表示是否可以使用JSP表达式.(比如EL表达式或OGNL表达式). 当在<attribute>标 ...
- velocity自定义标签和指令
velocity本身支持自定义标签和指令的扩展, 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用,而以井号 # 开头的语句则为 Velocity 的指令(Direct ...
- java中velocity定义宏标签_velocity自定义标签和指令(转:zwj)
velocity本身支持自定义标签和指令的扩展,我们看看扩展指令的步骤及searchweb2的应用场景, 1.使用方法 在 Velocity 模板语言的语法中,以美元符 $ 开头的为变量的声明或者引用 ...
最新文章
- python的assert作用
- 如何对软件项目团队成员进行角色和岗位的划分
- Docker初识之Centos6.2下安装Docker容器
- uva11111 	Generalized Matrioshkas
- ASP.NET Core 运行原理剖析
- vue 生命周期_Vue生命周期小白看了都会的
- 兰州交通大学计算机科学与技术排名,兰州交通大学怎么样 全国排名是多少
- php ob gzhandler,php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
- 孤岛惊魂4服务器稳定吗,《孤岛惊魂5》究竟好不好玩 让我来告诉你(缺点)
- c实现一个简单的线性反馈移位寄存器LFSR
- 安利4款良心的时间轴软件,建议收藏!
- struts1.x 升级到struts2的几点问题
- vue生命周期(简短精干篇)
- 分布式系统的知识点-架构设计
- 2014522420145238 《信息安全系统设计基础》 第五次实验
- Python 绘制五角星 【初识Python】
- unzip和zip指令的使用方法
- 技术人如何打造个人品牌,提高身价?
- jQuery实现网页右下角弹出广告
- 鸿蒙系统开发工具DevEco Studio 2.2下载/安装教程
热门文章
- 环境变量Path和classpath的作用是什么?
- python机器学习minimize函数参数介绍及作用
- 小目标检测论文笔记:Learning Calibrated-Guidance for Object Detection in Aerial Images
- 微积微发之query操作checkbox选中
- java登塔小游戏,是男人就上一百层
- 【java】jdb调试java代码
- Could not signal service com.apple.WebKit.WebContent: 113: Could not find specified service
- 第一范式,第二范式,第三范式,BCNF的理解
- Java中的过滤器Filter
- 如何学习一门新的语言