效果

<sys:dict type="DISEASES_OPTION" name="option_code" class="" />

创建方言

import org.thymeleaf.dialect.AbstractProcessorDialect;
import org.thymeleaf.processor.IProcessor;
import org.thymeleaf.standard.StandardDialect;
import org.thymeleaf.standard.processor.StandardXmlNsTagProcessor;
import org.thymeleaf.templatemode.TemplateMode;
import java.util.HashSet;
import java.util.Set;
/*** Thymeleaf 方言:系统用*/
public class SysDialect extends AbstractProcessorDialect {// 定义方言名称private static final String DIALECT_NAME = "Sys Dialect";public SysDialect() {// 设置自定义方言与“方言处理器”优先级相同super(DIALECT_NAME, "sys", StandardDialect.PROCESSOR_PRECEDENCE);}/*** 元素处理器* @param dialectPrefix 方言前缀* @return*/@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;}
}

创建并设置标签

这个类我这里从数据库中查的数据,可替换加数据看效果

import com.dnkj.childAppBackstage.model.Dictionary;
import com.dnkj.childAppBackstage.service.DictionaryService;
import org.springframework.context.ApplicationContext;
import org.thymeleaf.context.ITemplateContext;
import org.thymeleaf.model.IModel;
import org.thymeleaf.model.IModelFactory;
import org.thymeleaf.model.IProcessableElementTag;
import org.thymeleaf.processor.element.AbstractElementTagProcessor;
import org.thymeleaf.processor.element.IElementTagStructureHandler;
import org.thymeleaf.spring5.context.SpringContextUtils;
import org.thymeleaf.templatemode.TemplateMode;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/*** 自定义字典标签*/
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);}/*** 处理自定义标签 DOM 结构** @param iTemplateContext            模板页上下文* @param iProcessableElementTag      待处理标签* @param iElementTagStructureHandler 元素标签结构处理器*/@Overrideprotected void doProcess(ITemplateContext iTemplateContext, IProcessableElementTag iProcessableElementTag, IElementTagStructureHandler iElementTagStructureHandler) {// 获取 Spring上下文ApplicationContext applicationContext = SpringContextUtils.getApplicationContext(iTemplateContext);//获取字典service的beanDictionaryService dictService = applicationContext.getBean(DictionaryService.class);//获取标签的属性值String dictType = iProcessableElementTag.getAttributeValue("type");String dictName = iProcessableElementTag.getAttributeValue("name");String dictClass = iProcessableElementTag.getAttributeValue("class");//查询数据库//设置参数Map<String,Object> paraMap = new HashMap<String,Object>();paraMap.put("dict_type", dictType);// 根据类型查询出字典列表List<Dictionary> dictList = dictService.getList(paraMap);// 创建将替换自定义标签的 DOM 结构IModelFactory modelFactory = iTemplateContext.getModelFactory();IModel model = modelFactory.createModel();// 这里是将字典的内容拼装成一个下拉框model.add(modelFactory.createOpenElementTag(String.format("select name='%s' class='%s'", dictName, dictClass)));for (Dictionary dict : dictList) {model.add(modelFactory.createOpenElementTag(String.format("option value='%s'", dict.getDict_code())));model.add(modelFactory.createText(dict.getDict_name()));model.add(modelFactory.createCloseElementTag("option"));}model.add(modelFactory.createCloseElementTag("select"));// 利用引擎替换整合标签iElementTagStructureHandler.replaceWith(model, false);}
}

配置注入

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.dnkj.childAppBackstage.schedule.SysDialect;
/*** Thymeleaf配置
*/
@Configuration
public class ThymeleafDialectConfig {/*** 自定义方言注入* 字典下拉框下拉框* @return*/@Beanpublic SysDialect sysDialect() {return new SysDialect();}
}

使用

增加命名空间配置:xmlns:sys=""

<html xmlns:th="http://www.thymeleaf.org" xmlns:sys="">

<sys:dict type="DISEASES_OPTION" name="option_code" class="" />

springboot+thymeleaf自定义select标签相关推荐

  1. JSP自定义select标签中取值

    JSP自定义select标签的取值 select取值是通过name属性获取. 自定义标签的流程: 1.继承JSP标签的标签类TagSupport,SimpleTagSupport等,重写dostart ...

  2. 自定义select标签

    1:定义tid文件 <tag><name>select</name><tag-class>com.zhoujun.jsp.day02.SelectTag ...

  3. 实现自定义select标签

      我们经常会遇到这种场景:     假设项目中有一个分类对象,类似数据字典,一个code对应一个name.这个在页面作为一个过滤条件:选择分类.一般做法是在jsp页面直接写select标签,用opt ...

  4. html select 修改默认箭头样式,自定义select标签箭头样式

    select::-ms-expand{ display: none; }//ie样式清除 select{ appearance:none; -moz-appearance:none; -webkit- ...

  5. spring thymeleaf 自定义标签

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

  6. thymeleaf自定义标签

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

  7. html下拉选择框箭头改为年,CSS自定义select下拉选择框的样式(不用其他标签模拟)...

    今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...

  8. Springboot+thymeleaf+IDEA——解决th标签的报错问题,爆红,找不到标签

    文章目录 Springboot+thymeleaf+IDEA--解决th标签的报错问题,爆红,找不到标签 Springboot+thymeleaf+IDEA--解决th标签的报错问题,爆红,找不到标签 ...

  9. Springboot freemark自定义标签

    spring-boot里使用freemarker自定义标签 时间 2017-06-08 08:00:00   Tomoya 原文   https://tomoya92.github.io/2017/0 ...

最新文章

  1. 2002年3月英伟达发布核弹GPU与大算力自动驾驶芯片
  2. Material Master
  3. List list= new ArrayList为什么这样写 接口引用指向实现类的对象
  4. linux查看文件夹个球,[原创]linux下面的打小球游戏
  5. 向SAML响应中添加自定义声明–(如何为WSO2 Identity Server编写自定义声明处理程序)...
  6. php云解析播放器,xyplay云解析PHPV3.4.1优化稳定版视频解析
  7. java socket中的方法_Java中关于Socket的方法与作用详解
  8. vue+springboot实现登录验证码(前后端分离)
  9. Google各项产品汇总(附链接)
  10. 如何用UE4制作2D游戏文档(五)——战斗篇
  11. linux 录制软件下载,Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)
  12. 华三交换机配置access命令_华三交换机查看配置命令是什么
  13. 做最好的自己——摘自李镇西的《做最好的老师》
  14. 【几维安全】共享单车安全漏洞频现 女黑客轻松破解4款共享单车app
  15. c++基础题:判断某整数是正整数、负整数还是零
  16. 面试必备SQL调优方案
  17. 系统的简单注解 - 12 09_font.asm
  18. 死锁、活锁、饿死和阻塞的个人理解
  19. 单片机电子密码锁C语言程序,单片机电子密码锁的设计(汇编语言).doc
  20. 软件项目管理总结(2)软件项目立项和策划

热门文章

  1. Linux mmap报错PORT_READ undeclared PORT_READ undeclared异常
  2. 计算机组成原理——除法运算
  3. 膜拜大佬!成功收获了蚂蚁、拼多多、字节跳动Offer
  4. 知识付费平台怎么搭建
  5. Web前端第二季(CSS):七:第3章:盒子模型:306-盒子模型的外边距+307-外边距自动合并+308-边框样式+309-边框颜色和边框宽度
  6. 买二手房防骗攻略 ,让我们一起饿死无良中介
  7. ArcSDE 的介绍和使用
  8. 【量化金融】在投资中什么叫风格暴露?
  9. java-22:JVM基本原理 - 内存模型
  10. sqlite 截取字符串函数substr