简单标签 SimpleTagSupport示例
最近处理JSP页面,需要把数据库查到的原始值,根据数据字典转换成更加直观的值。比如查到的结果是 01,jsp页面展示‘身份证’。
如果值比较少,就直接用c:if标签处理了,无奈接触的值比较多,只想到了自定义标签来处理,如果哪个大神有更好的办法,请赐教。
新建class,继承SimpleTagSupport类,实现doTag方法。
package com.jeecg.tool.variable; import java.io.IOException;
import java.io.StringWriter;
import java.util.List;
import java.util.Map; import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport; import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.web.system.service.SystemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class HdDicTag extends SimpleTagSupport { private String dictionary; @Autowired
private static SystemService systemService; /**
* @Title: getDictionary <BR>
* @Description: please write your description <BR>
* @return: String <BR>
*/
public String getDictionary() {
return dictionary;
} /**
* @Title: setDictionary <BR>
* @Description: please write your description <BR>
* @return: String <BR>
*/
public void setDictionary(String dictionary) {
this.dictionary = dictionary;
} @Override
public void doTag() throws JspException, IOException {
StringWriter writer = new StringWriter();
JspFragment jspBody = this.getJspBody();
jspBody.invoke(writer);
String content = writer.toString(); systemService = ApplicationContextUtil.getContext().getBean(SystemService.class);
String sql = "SELECT\r\n" + " TYPENAME \r\n" + "FROM\r\n" + " \"T_S_TYPE\" \r\n" + "WHERE\r\n"
+ " TYPECODE = '" + content + "' AND TYPEGROUPID IN (\r\n" + "SELECT\r\n" + " id \r\n"
+ "FROM\r\n" + " T_S_TYPEGROUP g \r\n" + "WHERE\r\n" + " g.TYPEGROUPCODE = '" + dictionary + "')";
List<Map<String, Object>> list = systemService.findForJdbc(sql);
System.out.println(sql);
String typename = "";
if (list.size() > 1) {
this.getJspContext().getOut().write("数据字典获取异常,不唯一");
return;
} else if (list.size() < 1) {
this.getJspContext().getOut().write("");
} else {
typename = (String) list.get(0).get("TYPENAME");
this.getJspContext().getOut().write(typename);
}
} }
WEB-INF下新建tld文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.0</jsp-version>
<short-name>t</short-name>
<uri>hdDic-tags</uri>
<display-name>"自定义标签"</display-name> <tag>
<name>HdDicTag</name>
<tag-class>com.jeecg.tool.variable.HdDicTag</tag-class>
<body-content>JSP</body-content>
<description>列表字段</description>
<body-content>scriptless</body-content><!--这里要用这个处理-->
<attribute>
<name>dictionary</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>数据字典组编码 或 自定义字典</description>
</attribute>
</tag> </taglib>
然后在页面引入、使用。
<%@ taglib prefix="hd" uri="hdDic-tags"%>
<hd:HdDicTag dictionary="cardType">${hdBhApplyPage.idCardCategory}</hd:HdDicTag>
简单标签 SimpleTagSupport示例的更多相关文章
- JSP第七篇【简单标签、应用、DynamicAttribute接口】
为什么要用到简单标签? 上一篇博客中我已经讲解了传统标签,想要开发自定义标签,大多数情况下都要重写doStartTag(),doAfterBody()和doEndTag()方法,并且还要知道SKIP_ ...
- jsp简单标签开发(一)
孤傲苍狼 @Override22 public void doTag() throws JspException, IOException {23 //得到代表jsp标签体的JspFragment24 ...
- javaweb学习总结(二十六)——jsp简单标签标签库开发(二)
一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...
- javaweb学习总结(二十五)——jsp简单标签开发(一)
一.简单标签(SimpleTag) 由于传统标签使用三个标签接口来完成不同的功能,显得过于繁琐,不利于标签技术的推广, SUN公司为降低标签技术的学习难度,在JSP 2.0中定义了一个更为简单.便于编 ...
- javaweb(二十六)——jsp简单标签标签库开发(二)
一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段, ...
- JSP简单标签开发
一.继承自SimpleTag接口的自定义标签实现类称为简单标签,接口中5个方法 1.setJspContext方法 用于把JSP页面的PageContext对象传递给标签处理器对象 2.setPare ...
- 传智播客JavaWeb day07、day08-自定义标签(传统标签和简单标签)、mvc设计模式、用户注册登录注销
第七天的课程主要是讲了自定义标签.简单介绍了mvc设计模式.然后做了案例 1. 自定义标签 1.1 为什么要有自定义标签 前面所说的EL.JSTL等技术都是为了提高jsp的可读性.可维护性.方便性而取 ...
- javaweb学习总结(二十七)——jsp简单标签开发案例和打包
一.开发标签库 1.1.开发防盗链标签 1.编写标签处理器类:RefererTag.java 1 package me.gacl.web.simpletag; 2 3 import java.io.I ...
- JavaWeb学习记录(十九)——jstl自定义标签之简单标签
一.简单标签共定义了5个方法: setJspContext方法 setParent和getParent方法 setJspBody方法 doTag方法 二.方法介绍 osetJspContext方法 用 ...
随机推荐
- 使用mysql的注意事项
1,文件导入:LOAD DATA INFILE '/tmp/pet.txt' INTO TABLE pet FIELDS TERMINATED BY ',' LINES TERMINATED BY ' ...
- ROS的Target Platforms
问题 今天编译VIORB遇到了以下错误: 查到的资料 ubuntu18安装的二进制ros包需要特定版本的库函数 ros官方文档 文档pdf 参考回答 参考回答pdf
- CTF -攻防世界-crypto新手区(1~4)
题目已经提示用base64直接解密就行 base64解密网址 http://tool.oschina.net/encrypt?type=3 题目提示是凯撒密码 http://www.zjslove.c ...
- 微服务之docker(一)
一.docker介绍及使用 1.docker简介 (1)Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windo ...
- LeetCode——155. 最小栈
设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈. push(x) -- 将元素 x 推入栈中. pop() -- 删除栈顶的元素. top() -- 获取栈顶元素. ...
- Bugku杂项(1—28)
1.签到题 只要关注公众号就可以得到 flag---开胃菜 2.这是一张单纯的图片 用Winhex打开,会发现最下面有一行编码: key{you are right} 是一串HTML编码,解密下就行了 ...
- hash简单题(hdu4907)
Task schedule 地址:http://acm.hdu.edu.cn/showproblem.php?pid=4907 Problem Description 有一台机器,并且给你这台机器的工 ...
- www.wolframalpha.com
单个查询 http://www.wolframalpha.com/input/?source=nav&i=simplify+radical+sqrt(567) notebook https:/ ...
- 三、VIP课程:并发编程专题->01-并发编程之Executor线程池详解
01-并发编程之Executor线程池详解 线程:什么是线程&多线程 线程:线程是进程的一个实体,是 CPU 调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系 ...
- C到C++转变简述
从 C 到 C++ 语言的转变 1.平时使用还以 printf, scanf 为主 printf 和 scanf 与 cin cout 相比效率更快 2.头文件改成如下,C++对C语言兼容 #incl ...