2009-05-17 39 views
2

從JSP和servlet開發開始,我有一些問題需要在JSP頁面中插入自定義標籤。如何用JSP標籤擴展來解決這個問題?

步驟來完成:

  1. 寫和編譯成功WEB-INF/classes目錄(延伸TagSupport)一個CustomTag.java;
  2. 定義TLD文件,一個非常簡單的例子,包括<body-content>empty價值爲無身體標記;
  3. 在JSP頁面中使用標記,taglib指令指向我的/WEB-INF/tlds/site.tld文件。

有了這一切記住,你有一個線索,爲什麼Tomcat正在發送這樣的錯誤:

CustomTag不能提前解析爲一個類型

謝謝您答案,請詢問你是否需要更多細節。


這是我的TLD文件:

<?xml version="1.0" encoding="ISO-8859-1"?> 

< ! 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>customlib</short-name> 
    <description>Custom library.</description> 
    <tag> 
     <name>header</name> 
     <tag-class>HeaderTag</tag-class> 
     <body-content>empty</body-content> 
     <description>...</description> 
    </tag> 
</taglib> 

的JSP文件:

<%@ page contentType="text/html; charset=UTF-8" language="java" import="java.sql.*" errorPage="" %> 
<%@ taglib uri="/WEB-INF/tlds/customlib.tld" prefix="clib" %> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org /TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>title</title> 
</head> 

<body> 
    <clib:header /> 
</body> 
</html> 

的HeaderTag類:

import javax.servlet.jsp.JspTagException; 
import javax.servlet.jsp.tagext.TagSupport; 
import java.io.IOException; 

public class HeaderTag extends TagSupport { 

    public int doEndTag() throws JspTagException { 
     try { 
      pageContext.getOut().print("<p>header</p>"); 
     } 
     catch (IOException e) { 
      throw new JspTagException("Error."); 
     } 
     return EVAL_PAGE; 
    } 
} 
+0

您需要將您的標記類放入包中。 – kdgregory 2009-05-18 11:30:41

回答

3

您已重建並重新部署,更正?在這種情況下,我最好的猜測是你在TLD文件中省略了<標籤類>指令。

<tag> 
    <name>cookieIterator</name> 
    <tag-class>util.infoTemplates.CookieIterator</tag-class> 
    <body-content>JSP</body-content> 
</tag> 

如果這不是原因,請發佈您的TLD文件和示例JSP。


編輯:所有標記類必須有一個包。每JSP 2.0規範(部分JSP 11.2):

作爲JSP 2.0的,它是非法從無名(又名 默認)封裝是指任何類。

+0

不幸的是,這不是那種問題。應用程序被重新部署,類「重新編譯」和TLD文件似乎是有效的。 – elbaid 2009-05-18 01:05:35