在后台web应用系统中,在一些含有字典值数据情况下,这些数据要显式地展示给用户,就要通过转换字典值数据,然后返回到页面。
①每次通过遍历字典数据然后在展示数据中增加转换后的值,然后将数据返回到页面。
②通过自定义标签,页面自动转换字典值显示问题。
相比第一种解决方案,第二种方式可以通过一个标签处理所有的数据字典,不必像第一种方案那样要每次在后台手动处理。
通过编写一个标签处理类,主要继承 SimpleTagSupport 类,重写 doTag 方法。
public class DictTag extends SimpleTagSupport { private String dictCode; public String getDictCode() { return dictCode; } public void setDictCode(String dictCode) { this.dictCode = dictCode; } @Override public void doTag() throws JspException, IOException { List<Record> list =DictCache.getSelect(dictCode);//获取字典 String json = JsonKit.toJson(list); StringBuilder stringBuilder = new StringBuilder(); stringBuilder.append("<script>"); stringBuilder.append(" var data_").append(dictCode).append("="); stringBuilder.append(json); stringBuilder.append(";"); stringBuilder.append("function "); stringBuilder.append("render_").append(dictCode); stringBuilder.append("(item,item1,item2,cell){"); stringBuilder.append("for( var i=0;i<data_").append(dictCode).append(".length;i++){"); stringBuilder.append("if(item[cell.name]==data_").append(dictCode).append("[i].itemValue){"); stringBuilder.append("return data_").append(dictCode).append("[i].itemName;"); stringBuilder.append("}"); stringBuilder.append("}"); stringBuilder.append("}"); stringBuilder.append("</script>"); getJspContext().getOut().write(stringBuilder.toString()); } }
建立TLD文件,
<?xml version="1.0" encoding="GBK"?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.0</tlib-version> <short-name>dicttaglib</short-name> <!-- 定义该标签库的URI --> <uri>http://www.xxx.org/mytaglib</uri> <!-- 定义第一个标签 --> <tag> <!-- 定义标签名 --> <name>dictCode</name> <!-- 定义标签处理类 --> <tag-class>com.xxxTag</tag-class> <!-- 定义标签体为空 --> <body-content>empty</body-content> <attribute> <name>dictCode</name> <required>true</required> </attribute> </tag> </taglib>
使用标签:
<%@ taglib uri="tagliburi" prefix="dict" %>
<d:dict dictCode="xxx"/>
ligerGrid({ checkbox : true, height : '96%', columns : [ { display : 'goddamn handsome', name : 'xxx', minWidth : 120, render:render_xxx //render_xxx 根据doTag返回的数据而定 }] })