首先說明這是一個HelloWorld程式。
解決的問題有:1.工程中無法使用EL運算式處理; 2.TLD應如何定義; 3.自訂一個JSP標籤
1.EL運算式無法使用
(我使用的是今天晚上剛下載的tomcat.6.0.36版本,不過這個問題和tomcat版本沒有關係)
1)之前總會出現的問題。我原來的解決方案是將web.xml檔案中的版本號碼由2.5修改為2.4
例如:<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd">
但是這樣感覺不大好。
2)現解決方案是將JAVA EE 5 Libraries中的JAR包複製到工程中的lib目錄下就解決了這個問題。
(我的:http://download.csdn.net/detail/cl61917380/5227429)
2.TLD應如何定義
1)如,將tag.tld檔案複製到WEB-INF目錄下。
2)有的人問如何可以找到官方的TLD檔案定義的格式。其實只要在文檔頭部添加xsd,告訴IDE我的XML應該如何定義就行了,這樣在寫XML檔案的時候IDE會給我們提示。
<?xml version="1.0" encoding="UTF-8"?><taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlibversion>1.0</tlibversion><jspversion>1.1</jspversion><tag><name>tag</name><tagclass>com.jungle.tag.PageTag</tagclass><bodycontent>empty</bodycontent><!-- 定義屬性 --><attribute><name>currentPage</name><!-- 屬性名稱字 --><type>int</type><!-- 屬性類型 --><required>true</required><!-- 是否必須 --><rtexprvalue>true</rtexprvalue><!-- 支援EL運算式 --></attribute><attribute><name>pageCount</name><!-- 屬性名稱字 --><type>int</type><!-- 屬性類型 --></attribute></tag></taglib>
3.建立標籤類
public class PageTag extends TagSupport {private int currentPage = 1;private int pageCount = 10;@Overridepublic int doStartTag() throws JspException {ServletResponse resp = this.pageContext.getResponse();try {PrintWriter writer = resp.getWriter();writer.print("doStartTag()..." + "currentPage = " + currentPage + " pageCount = " + pageCount);writer.flush();writer.close();} catch (IOException e) {e.printStackTrace();}return super.doStartTag();}public int getCurrentPage() {return currentPage;}public void setCurrentPage(int currentPage) {this.currentPage = currentPage;}public int getPageCount() {return pageCount;}public void setPageCount(int pageCount) {this.pageCount = pageCount;}}
JSP頁面:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="/WEB-INF/tag.tld" prefix="pt"%><!--引入自訂標籤--><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!--這裡用的是1.2的uri,1.1的uri是http://java.sun.com/jstl/core 我用這兩個uri頁面都正常--><% request.setAttribute("currentPage",3);//當前頁 request.setAttribute("content","查詢關鍵字");//查詢關鍵字%> <pt:tag currentPage="${currentPage}" pageCount="123"/><br>