【JavaWeb探究】自定義JSP標籤(三)

     上篇博客我們簡單的創建了一個自定義標籤,這篇博客我們將繼續介紹自定義JSP標籤,不過難度升級,我們來定義一個稍難一點的自定義JSP標籤,來做一個下拉框,查詢父節點對應下面的子節點,我們以查詢一個省份下對應的城市爲例。


     還是按照之前的步驟,首先我們先創建一個處理該標籤的類。

<span style="font-size:12px;">package com.csds.area;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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

import com.zlwy.common.util.SpringUtils;
import com.zlwy.organ.basedict.manager.IBaseDictManager;
import com.zlwy.organ.basedict.service.impl.AreaInfo;
import com.zlwy.organ.entity.BaseDict;

public class AreaInfoTagTest  extends TagSupport{
	
	public String areaSelectValue;//選擇值
	public String areaParentId;//父id
	
	/**
	 * <p>Description: 結束標籤時調用</p>
	 */
	public int doEndTag() throws JspException {
		StringBuffer sb = getAreaInfoName();
    	
    	JspWriter out = pageContext.getOut();
    	try {
	    	out.print(sb.toString());
    	} catch (IOException ex) {
    		throw new JspTagException("IOException: " + ex.toString());
        }
        return super.doEndTag();
	}

	/**
	 * <p>Description: 根據父id查詢子節點名稱</p>
	 */
	private StringBuffer getAreaInfoName(){
		StringBuffer sb = new StringBuffer();
		sb.append("<option value=\"\">請選擇</option>");
		List<AreaInfo> areaInfoList = new ArrayList<AreaInfo>();
		try {
			areaInfoList = areaInfoManager.getDictBySSuperGuid(areaParentId);
		} catch (Exception e) {
			e.printStackTrace();
		}
		if (areaInfoList != null && areaInfoList.size()>0) {
			for (AreaInfo areaInfo : areaInfoList) {
				if (areaSelectValue.trim().equals(areaInfo.getSGuid().trim())) {
					sb.append("<option value =\"" + areaInfo.getSGuid().trim()+ "\" selected=\"selected\">");
					sb.append("" + areaInfo.getAreaName() + "</option>");
				} else {
					sb.append("<option value =\"" + areaInfo.getSGuid().trim()+ "\">");
					sb.append(""+ areaInfo.getAreaName() + "</option>");
				}
			}
		}
		return sb;
	}
	
	/**
	 * <p>Description: sql語句查詢,根據父id查詢子節點名稱</p>
	 */
	public List<AreaInfo> getAreaInfoNameByParentId(String areaParentId){
		List<AreaInfo> areaInfoList = null;
		try {
			StringBuffer sql = new StringBuffer();
			sql.append("from AreaInfo a where a.areaParentId = '" + areaParentId + "'");
			sql.append("order by t.IOrderNo asc");
			areaInfoList = getList(sql.toString());
        } catch(Exception e) {
			e.printStackTrace();
			throw e;
		}
        
		return areaInfoList;
	}

	/*********************************get/set方法****************************/
	public String getAreaSelectValue() {
		return areaSelectValue;
	}

	public void setAreaSelectValue(String areaSelectValue) {
		this.areaSelectValue = areaSelectValue;
	}

	public String getAreaParentId() {
		return areaParentId;
	}

	public void setAreaParentId(String areaParentId) {
		this.areaParentId = areaParentId;
	}

}</span>

     創建一個xxx.tld文件,代碼如下:

<?xml version="1.0" encoding="UTF-8" ?>
<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 http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
    version="2.0">
    <description>A tag library exercising SimpleTag handlers.</description>
    <tlib-version>1.0</tlib-version>
    <short-name>mt</short-name>
	
	<tag>
	    <description> Display areaInfo name </description>
	    <name>areaInfolist</name>
	    <tag-class>com.csds.area.AreaInfoTag</tag-class>
	    <attribute>
	       <name><span style="font-size:12px;">areaParentId</span></name>
	       <required>true</required>
	       <rtexprvalue>true</rtexprvalue>
	    </attribute>
	    <attribute>
	       <name><span style="font-size:12px;">areaSelectValue</span></name>
	       <required>false</required>
	       <rtexprvalue>true</rtexprvalue>
	    </attribute>
	</tag>
</taglib>
     在web.xml中的配置一樣

<taglib>  
    <taglib-uri>/MyTagTest</taglib-uri>  
    <taglib-location>/WEB-INF/tlds/myTagTest.tld</taglib-location>  
</taglib>

     然後在頁面中引入如下代碼

<span style="font-size:14px;"><%@ taglib uri="/MyTagTest" prefix="mt"%>   </span>

     最後在頁面中直接用我們自定義的JSP標籤就可以了

<span style="font-size:12px;"><select>
	<mt:areaInfolist areaParentId="" areaSelectValue=""></zw:basedictlist>
</select></span>

     這樣,一個自定義的JSP標籤就可以用了。到這裏,關於自定義標籤的內容就介紹完了,這三篇文章分別從理論到實踐,從簡到難對自定義JSP標籤進行了介紹。有興趣的可以深入研究一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章