思路:
首先tdl自定義标簽就是比如類似input、div、ul、li之類的标簽,隻是名字自己來定義,但實際上要在頁面上看到效果還是需要些html代碼,隻是在頁面上隻需要寫自己标簽就可以代表一部分html代碼而已,相當于類似模闆一樣,但又可以從前端傳參的進入這個模闆變成動态模闆傳回到前端生成頁面。寫這個模闆的用處主要是做一些統一的模闆,比如:多選框、下拉選擇、圖檔上傳、圖檔檢視等固定模闆,隻需要在傳入的時候添加各種參數,比如ID、名稱等就可以達到很好的利用,而且前端代碼也很美觀,用起來很友善,如果有需要保密的的話可以打包成jar包使用,隻是這樣就增加了維護的難度。
第一步:建立字尾為.tld檔案
在web-inf下面編寫一個XXX.tld檔案和web.xml同級(XXX代表名字自定義),為什麼要同級,我猜測應該是項目編譯的時候會向自動讀取web.xml一樣讀取easyui.tld吧,因為建立好了之後不需要在什麼地方配置或加載這個檔案,直接就可以用了。這裡為了友善我取得名字為:easyui.tld

第二步:編寫.tld代碼
圖檔解釋:
代碼:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>dswl</short-name>
<uri>dswl</uri>
<display-name>"自定義标簽"</display-name>
<tag>
<name>DropBox</name>
<tag-class>com.ssm.web.core.tld.DropBoxTag</tag-class>
<body-content>JSP</body-content>
<description>基礎表單選按鈕</description>
<attribute>
<name>identification</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<description>辨別</description>
</attribute>
<attribute>
<name>serialNumber</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>序号</description>
</attribute>
</tag>
</taglib>
第三步:com.ssm.web.core.tld.DropBoxTag内容
這個類是自定義的類,可以寫自己想寫的一切代碼,比如邏輯處理、html代碼的拼接等。
注意:如果複制這個代碼在引入包的地方或繼承類的時候會出錯誤,請看最後的注意事項。
圖檔解釋:
代碼:
package com.ssm.web.core.tld;
import javax.servlet.jsp.JspTagException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;
import java.io.IOException;
/**
* Created by yy on 2016/8/9.
*/
public class DropBoxTag extends TagSupport{
private static final long serialVersionUID = L;
private String identification;
private String serialNumber;
public int doEndTag() throws JspTagException {
System.out.print(identification+serialNumber);
JspWriter writer= this.pageContext.getOut();
StringBuffer content = new StringBuffer();
content.append("<input type='text' value='測試' />");
try {
writer.print(content.toString());
} catch (IOException e) {
e.printStackTrace();
}
return ;
}
public String getIdentification() {
return identification;
}
public void setIdentification(String identification) {
this.identification = identification;
}
public String getSerialNumber() {
return serialNumber;
}
public void setSerialNumber(String serialNumber) {
this.serialNumber = serialNumber;
}
}
第四步:前端頁面的引用
(1)首先需要把這個自定義的标簽引用到jsp頁面中
解釋:
比如命名ds 使用方法:<ds:XXXXX></ds:XXXXX>
比如命名yy 使用方法:<yy:XXXXX></yy:XXXXX>
Uri 代表tdl檔案中<uri></uri>标簽的名稱
比如命名dswl tdl檔案中<uri>dswl</uri>
比如命名yyyy tdl檔案中<uri>yyyy</uri>
(2)使用标簽
解釋:
ds:是 prefix中獲得
DropBox:是tdl檔案中<tag><name>DropBox</name></tag>name的名稱
Identification:是tdl檔案<attribute><name>identification</name></attribute>name的名稱,如果是true就是代表必須要的這個屬性,如果false就是可以有也可以沒有
serialNumber:是tdl檔案<attribute><name>serialNumber</name></attribute>name的名稱,如果是true就是代表必須要的這個屬性,如果false就是可以有也可以沒有
屬性後面的 =”” 是要傳入的值
第五步:注意事項
一般到這裡就成功了,可以試試結果了,但有可能也會出現一些意外。
因為com.ssm.web.core.tld.DropBoxTag這個類繼承了TagSupport,用到了jar包的一些東西,用到的是servlet-api.jar和jsp-api-2.0.jar,需要引入這2個jar包,但是這2個jar包在tomcat的lib目錄下也有這2個包,這樣就會起沖突,但項目又用到了這2個包,不能直接删除,這個時候需要使用下面的方法進行解決:
描述:
1·右擊項目名稱—-properties—-java Build Path—-Add Library—myeclipse Libraries—-javaEE5 Libraries複選框選中—-finish
2·删掉WEB-INF下的jsp-api,servlet-api重新部署
3·成功
圖示:
這裡沒有java EE5 Libraries是因為我已經導入了,如果沒導入就會有。導入這個的意思是這裡面會有這個2個jar包,并且不會與tomcat相沖突。