2009-05-17 4 views
2

Beginnt mit JSP und Servlet-Entwicklung, habe ich einige Probleme mit einem bodyless benutzerdefinierten Tag in einer JSP-Seite eingefügt werden.Wie löst man dieses Problem mit der JSP-Tag-Erweiterung?

Schritten:

  1. Schrieb und kompiliert erfolgreich eine CustomTag.java in WEB-INF/classes Verzeichnis (TagSupport erstreckt);
  2. Definierte die TLD-Datei mit einem sehr einfachen Beispiel, einschließlich <body-content> mit einem empty Wert für ein bodyless Tag;
  3. Verwendet das Tag in einer JSP-Seite mit Taglib-Direktive auf meine /WEB-INF/tlds/site.tld Datei.

Mit all dem im Verstand, haben Sie eine Ahnung, warum Tomcat einen Fehler wie dies sendet:

CustomTag kann nicht auf einen Typ

Vielen Dank im Voraus geklärt werden für Ihre Antworten, und bitte fragen Sie, wenn Sie weitere Informationen benötigen.


Hier ist meine TLD-Datei:

<?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> 

Die JSP-Datei:

<%@ 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> 

Die HeaderTag Klasse:

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

Sie müssen Ihre Tag-Klasse in ein Paket einfügen. – kdgregory

Antwort

3

Sie haben neu erstellt und neu implementiert, richtig? In diesem Fall ist meine beste Schätzung, dass Sie die <-Tag-Klasse > Direktive in der TLD-Datei weggelassen haben.

Wenn das nicht der Grund ist, posten Sie bitte Ihre TLD-Datei und eine Beispiel-JSP.


Bearbeiten: Alle Tag-Klassen müssen ein Paket haben. Per JSP 2.0-Spezifikation (Abschnitt JSP 11.2):

Ab JSP 2.0, ist es illegal, auf alle Klassen aus dem unbenannte (auch bekannt als Standard) Paket beziehen.

+0

Leider ist das nicht so ein Problem. Die Anwendung wurde erneut implementiert, die Klassen "neu kompiliert" und die TLD-Datei scheinen gültig zu sein. – elbaid

+0

Mit dem Bearbeiten, das war das Problem, kein Paket, und jetzt funktioniert es. Vielen Dank. – elbaid