springboot+thymeleaf自定义select标签
效果
<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标签相关推荐
- JSP自定义select标签中取值
JSP自定义select标签的取值 select取值是通过name属性获取. 自定义标签的流程: 1.继承JSP标签的标签类TagSupport,SimpleTagSupport等,重写dostart ...
- 自定义select标签
1:定义tid文件 <tag><name>select</name><tag-class>com.zhoujun.jsp.day02.SelectTag ...
- 实现自定义select标签
我们经常会遇到这种场景: 假设项目中有一个分类对象,类似数据字典,一个code对应一个name.这个在页面作为一个过滤条件:选择分类.一般做法是在jsp页面直接写select标签,用opt ...
- html select 修改默认箭头样式,自定义select标签箭头样式
select::-ms-expand{ display: none; }//ie样式清除 select{ appearance:none; -moz-appearance:none; -webkit- ...
- spring thymeleaf 自定义标签
概述 thymeleaf2.1.5自定义标签及自定义属性案例,类似于JSP中的自定义JSTL标签 详细 代码下载:http://www.demodashi.com/demo/10495.html 一. ...
- thymeleaf自定义标签
前言 使用thymeleaf自定义标签,环境:springboot 2.3.7 + thymeleaf 3.0.11(2021-01-14最新版) 由于使用shiro,我们需要与thymeleaf整合 ...
- html下拉选择框箭头改为年,CSS自定义select下拉选择框的样式(不用其他标签模拟)...
今天群里有人问到怎么自定义select下拉选择框的样式,于是群里就展开了激烈的讨论,刚开始一直就是考虑怎样使用纯CSS实现,把浏览器默认的样式覆盖掉,但最后均因兼容问题处理不好而失败告终,最后的解决方 ...
- Springboot+thymeleaf+IDEA——解决th标签的报错问题,爆红,找不到标签
文章目录 Springboot+thymeleaf+IDEA--解决th标签的报错问题,爆红,找不到标签 Springboot+thymeleaf+IDEA--解决th标签的报错问题,爆红,找不到标签 ...
- Springboot freemark自定义标签
spring-boot里使用freemarker自定义标签 时间 2017-06-08 08:00:00 Tomoya 原文 https://tomoya92.github.io/2017/0 ...
最新文章
- 2002年3月英伟达发布核弹GPU与大算力自动驾驶芯片
- Material Master
- List list= new ArrayList为什么这样写 接口引用指向实现类的对象
- linux查看文件夹个球,[原创]linux下面的打小球游戏
- 向SAML响应中添加自定义声明–(如何为WSO2 Identity Server编写自定义声明处理程序)...
- php云解析播放器,xyplay云解析PHPV3.4.1优化稳定版视频解析
- java socket中的方法_Java中关于Socket的方法与作用详解
- vue+springboot实现登录验证码(前后端分离)
- Google各项产品汇总(附链接)
- 如何用UE4制作2D游戏文档(五)——战斗篇
- linux 录制软件下载,Ubuntu下安装屏幕录像软件(SimpleScreenRecorder)
- 华三交换机配置access命令_华三交换机查看配置命令是什么
- 做最好的自己——摘自李镇西的《做最好的老师》
- 【几维安全】共享单车安全漏洞频现 女黑客轻松破解4款共享单车app
- c++基础题:判断某整数是正整数、负整数还是零
- 面试必备SQL调优方案
- 系统的简单注解 - 12 09_font.asm
- 死锁、活锁、饿死和阻塞的个人理解
- 单片机电子密码锁C语言程序,单片机电子密码锁的设计(汇编语言).doc
- 软件项目管理总结(2)软件项目立项和策划
热门文章
- Linux mmap报错PORT_READ undeclared PORT_READ undeclared异常
- 计算机组成原理——除法运算
- 膜拜大佬!成功收获了蚂蚁、拼多多、字节跳动Offer
- 知识付费平台怎么搭建
- Web前端第二季(CSS):七:第3章:盒子模型:306-盒子模型的外边距+307-外边距自动合并+308-边框样式+309-边框颜色和边框宽度
- 买二手房防骗攻略 ,让我们一起饿死无良中介
- ArcSDE 的介绍和使用
- 【量化金融】在投资中什么叫风格暴露?
- java-22:JVM基本原理 - 内存模型
- sqlite 截取字符串函数substr