2009-05-17 8 views
2

En commençant avec le développement de JSP et de servlet, j'ai quelques problèmes avec une étiquette faite sur commande de bodyless à être insérée dans une page de JSP.Comment résoudre ce problème avec l'extension JSP?

étapes effectuées:

  1. a rédigé et compilé avec succès un CustomTag.java (extension TagSupport) dans WEB-INF/classes répertoire;
  2. Défini le fichier TLD, avec un exemple très simple, incluant <body-content> avec une valeur empty pour une étiquette sans corps;
  3. Utilisé le tag dans une page JSP avec la directive taglib pointant vers mon fichier /WEB-INF/tlds/site.tld.

Avec tout cela à l'esprit, avez-vous une idée de pourquoi Tomcat envoie une erreur comme ceci:

CustomTag ne peut être résolu à un type

Merci d'avance pour votre réponses, et s'il vous plaît demander si vous avez besoin de plus de détails.


Voici mon fichier 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> 

Le fichier 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> 

La classe 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

Vous devez placer votre classe de tags dans un package. – kdgregory

Répondre

3

Vous avez reconstruit et redéployé, correct? Dans ce cas, ma meilleure estimation est que vous avez omis la directive < tag-class > dans le fichier TLD.

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

Si ce n'est pas la cause, veuillez publier votre fichier TLD et un exemple JSP.


Modifier: Toutes les classes de balises doivent avoir un package. Par la spécification JSP 2.0 (section JSP 11.2):

Comme JSP 2.0, il est illégal de se référer à toutes les classes du package sans nom (par défaut a.k.a.).

+0

Malheureusement, ce n'est pas ce genre de problème. L'application a été redéployée, les classes "recompilées" et le fichier TLD semble être valide. – elbaid

+0

Avec l'édition, c'était le problème, pas de paquet, et maintenant ça marche. Je vous remercie. – elbaid

Questions connexes