JSP自訂標籤(EL運算式問題和TLD檔案說明)

來源:互聯網
上載者:User

首先說明這是一個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>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.