JSP 自定义标签 的 开发

为了简单说明,拿系统代码处理为例,根据标识获取名称

定义xxx.tld文件,放在WEB-INF下的tld中
<?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.2</tlibversion>
	<jspversion>1.1</jspversion>
	<shortname>cpctld</shortname>
	<uri>/fulg</uri>
	<tag>
		<name>xiTongDaiMaMingCheng</name>
		<tagclass>com.xxx.xxx.tag.XiTongDaiMaNameTag</tagclass>
		<bodycontent>empty</bodycontent>
		<description>
			<![CDATA[根据系统代码的整形代码或字符代码获取名称,标签中可选择任意一种定义并赋值]]>
		</description>
		<attribute>
			<name>biaoshi</name>
			<required>true</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
				<![CDATA[当前系统代码的父节点标识,必定义]]>
			</description>
		</attribute>
		<attribute>
			<name>mingCheng</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
				<![CDATA[当前系统代码的父节点名称,仅作显示指导使用,非必定义]]>
			</description>
		</attribute>
		<attribute>
			<name>zhengXingDaiMa</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
				<![CDATA[整形代码,非必定义,但与字符代码至少定义一个]]>
			</description>
		</attribute>
		<attribute>
			<name>ziFuDaiMa</name>
			<required>false</required>
			<rtexprvalue>true</rtexprvalue>
			<description>
				<![CDATA[整形代码,非必定义,但与字符代码至少定义一个]]>
			</description>
		</attribute>
		
	</tag>
</taglib>



web.xml中配置所写的xxx.tld

<jsp-config>
   <taglib>
	<taglib-uri>/fulg</taglib-uri>
	<taglib-location>/WEB-INF/tld/xxx.tld</taglib-location>
   </taglib>
</jsp-config>




写标签类

package xxx.xxx.tag;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.WeakHashMap;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;



/**
 * @ClassName: XiTongDaiMaNameTag
 * @Description: TODO(系统代码标签,根据zhengXingDaiMa或ziFuDaiMa获取整形代码名称,两种情况标签中至少写一个,都写按ziFuDaiMa查询)
 * @Company neusoft
 * @author fulg
 * @date 2013-10-30
 */
public class XiTongDaiMaNameTag extends TagSupport{
	
	//父节点标识
	private int biaoshi;

	//父节点名称,非必填项,仅作显示说明使用,代码里显示当前系统代码的名称
	private String mingCheng;
	

	//整形代码
    private int zhengXingDaiMa;
	
    //字符代码
	private String ziFuDaiMa;
	
	//名称缓存
	//private WeakHashMap nameMap;//使用map缓存后,系统代码树的修改无法实时反映到map中
	

	
	@Override	
	public int doStartTag() throws JspException {
		
		String xiTongDaiMaMingCheng = "";
		
		//if(nameMap==null||nameMap.isEmpty()){
			
				
				ContextHolder.setCustomerType(SysConstants.CURRENT_SERVER);
		        
				//系统代码实例对象
			    IXiTongDaiMaService xiTongDaiMaService = (IXiTongDaiMaService)AppContextUtils.getBean("xiTongDaiMaService");
				
					
				//根据父类查询系统代码列表	
				List<XiTongDaiMa>   list = null;
				
				
				//if(mingCheng!=null){//不以名称查询,因为名称可以改变
								
				//	list = xiTongDaiMaService.getXiTongDaiMaByFenLeiMingCheng(mingCheng);
								
				//}else{
				
					list = xiTongDaiMaService.getXiTongDaiMaByFuJieDianBiaoShi(biaoshi);
					
				//}//else end
				
			
				//nameMap = new WeakHashMap();
					
				for (XiTongDaiMa vo:list) {
					
						if(ziFuDaiMa!=null){
							
							//nameMap.put(vo.getZiFuDaiMa(), vo.getMingCheng());
							
							if(ziFuDaiMa.equals(vo.getZiFuDaiMa())){
								xiTongDaiMaMingCheng = vo.getMingCheng();
								break;
							}
							
						}else{
							
							//nameMap.put(vo.getZhengXingDaiMa(), vo.getMingCheng());
							
							if(zhengXingDaiMa==vo.getZhengXingDaiMa()){
								xiTongDaiMaMingCheng = vo.getMingCheng();
								break;
							}
							
						}
		
					}
			
		//}//if nameMap==null
		
		/*if(ziFuDaiMa!=null&&!ziFuDaiMa.equals("")){
			xiTongDaiMaMingCheng = (String)nameMap.get(ziFuDaiMa);
			
		}else{
			xiTongDaiMaMingCheng = (String)nameMap.get(zhengXingDaiMa);
			
		}*/
			
		
                //此方法里也可以封装jsp页面元素等操作
                //例如String str = "<select id='xxx' name='xxx'><option value="+vo.getZhengXingDaiMa()+">"+vo.getMingCheng()+"</option></select>"
                //注:option需要for循环等操作
                //然后把会写到页面就可以了out.write(str);

		try {
			JspWriter out = pageContext.getOut();
			out.write(xiTongDaiMaMingCheng);
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}
		return SKIP_BODY;
	}
	
	
	
	@Override
	public int doEndTag() throws JspException {
		return EVAL_PAGE;
	}
	
	
	
	
	public int getBiaoshi() {
		return biaoshi;
	}

	public void setBiaoshi(int biaoshi) {
		this.biaoshi = biaoshi;
	}

	public String getMingCheng() {
		return mingCheng;
	}

	public void setMingCheng(String mingCheng) {
		this.mingCheng = mingCheng;
	}

	public int getZhengXingDaiMa() {
		return zhengXingDaiMa;
	}

	public void setZhengXingDaiMa(int zhengXingDaiMa) {
		this.zhengXingDaiMa = zhengXingDaiMa;
	}

	public String getZiFuDaiMa() {
		return ziFuDaiMa;
	}

	public void setZiFuDaiMa(String ziFuDaiMa) {
		this.ziFuDaiMa = ziFuDaiMa;
	}

	/*public WeakHashMap getNameMap() {
		return nameMap;
	}

	public void setNameMap(WeakHashMap nameMap) {
		this.nameMap = nameMap;
	}*/
	
}




最后页面使用
<td nowrap="nowrap">
    <fulg:xiTongDaiMaMingCheng  biaoshi="100" mingCheng="审核状态"  zhengXingDaiMa='${shenHeZhuangTai}' />&nbsp;
</td>

你可能感兴趣的:(jsp,自定义标签)