上篇博客我們簡單的創建了一個自定義標籤,這篇博客我們將繼續介紹自定義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標籤進行了介紹。有興趣的可以深入研究一下。