最近处理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>