如何用JSP标记扩展来解决这个问题?

时间:2009-05-17 23:15:25

标签: jsp-tags

开始使用JSP和servlet开发,我在将一个无体自定义标记插入JSP页面时遇到了一些问题。

已完成的步骤:

  1. TagSupport目录中成功编写并编译了CustomTag.java(扩展WEB-INF/classes);
  2. 定义了TLD文件,其中包含一个非常简单的示例,包括<body-content>,其中包含empty无体标记的值;
  3. 在JSP页面中使用标记,taglib指令指向我的/WEB-INF/tlds/site.tld文件。
  4. 考虑到所有这些,您是否知道为什么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;
        }
    }
    

1 个答案:

答案 0 :(得分:3)

你重建并重新部署了,对吗?在这种情况下,我最好的猜测是你遗漏了&lt; tag-class&gt; 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开始,引用未命名的任何类(a.k.a.)是违法的。   默认)包。