java jstl 自定义标签
2017-02-11 15:29
525 查看
package com.xilehang.common.util; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Scanner; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.tagext.TagSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.json.JSONObject; /** * 自定义数字字典转换,支持json和map两种 * @author ctl * */ public class StatusTag extends TagSupport { static Logger logger = LoggerFactory.getLogger(StatusTag.class); /** * */ private static final long serialVersionUID = 1L; protected String name; private static HashMap<String, Map<String, Object>> hashMap; protected String type; private String jsonName; private String mapName; public String getMapName() { return mapName; } public void setMapName(String mapName) { this.mapName = mapName; } public String getJsonName() { return jsonName; } public void setJsonName(String jsonName) { this.jsonName = jsonName; } static{ hashMap=new HashMap<String,Map<String,Object>>(); Map<String,Object> portalPayStatus=new HashMap<String, Object>(); portalPayStatus.put("0", "已经接受"); portalPayStatus.put("1", "处理中"); portalPayStatus.put("2", "支付成功"); portalPayStatus.put("3", "支付失败"); hashMap.put("portalPayStatus", portalPayStatus); } @SuppressWarnings("unchecked") public int doEndTag() throws JspException { JspWriter out=null; try { out = pageContext.getOut(); if("json".equals(type)){//如果类型为json 对应的js文件存放zai/conf/json下面 if(hashMap.get(jsonName)==null||"".equals(hashMap.get(jsonName))){//如果是第二次调用json文件则从map中取值,避免多次读取文件 Scanner scanner = new Scanner(StatusTag.class.getClassLoader().getResourceAsStream("json" + File.separator + jsonName + ".js"),"utf-8"); StringBuilder buf = new StringBuilder(); while (scanner.hasNext()) { String str = scanner.nextLine(); if (str != null) { buf.append(str.trim()); } } scanner.close(); Map<String, Object> jsonMap = JSONObject.fromObject(buf.toString()); hashMap.put(jsonName, jsonMap);//将数据放到map中,防止多次执行调用读取js文件 String value=jsonMap.get(name).toString(); if(value==null){ out.print(name); }else{ out.print(value); } }else{ String value=(String) hashMap.get(jsonName).get(name); if(value==null){ out.print(name); }else{ out.print(value); } } }else if("map".equals(type)){ out.print(hashMap.get(mapName).get(name)); } } catch (Exception e) { try { out.print(name); } catch (IOException e1) { } logger.error("自定义标签转换异常",e); } return super.doEndTag(); } public int doStartTag() throws JspTagException { return EVAL_BODY_INCLUDE; } public HashMap<String, Map<String, Object>> getHashMap() { return hashMap; } public String getName() { return name; } public void setName(String name) { if(name!=null){ this.name = name.trim(); }else{ this.name=""; } } public String getType() { return type; } public void setType(String type) { this.type = type; } }
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.1</jspversion> <shortname>StatusTag</shortname> <tag> <name>payStatus</name> <tagclass>com.xilehang.common.util.StatusTag</tagclass> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>mapName</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>type</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>jsonName</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
<%@ taglib uri="/WEB-INF/tld/statusTran.tld" prefix="payStatus"%>
<td><payStatus:payStatus name="1" type="json" jsonName="portalpayStatus"/></td>
portalpayStatus.js 内容为 {'0':'已经接受','1':'处理中','2':'支付成功','3':'支付失败'}
相关文章推荐
- Java面向对象(二)重写(Override)与重载(Overload)
- Java面向对象(一)继承
- 关于java的中断机制(interrupt)
- CyclicBarrier使用详解
- java接口与抽象类
- 初探Lambda表达式-Java多核编程【0】从外部迭代到内部迭代
- springMVC--requestBody和responseBody
- Java字符串
- JAVA大作业汇总3
- 解决SpringMVC 返回Java8 时间JSON数据的格式化问题处理
- JDK 1.8 HashMap详细介绍
- Java设计模式简单学习
- Java设计模式简单学习
- Spring的AOP编程
- 内功心法 -- java.util.ArrayList<E> (1)
- 【JAVA学习】——J2EE规范
- 玩转JDK动态代理
- web.xml文件的作用?
- Spring中的Bean配置
- Spring配置数据源四种方式