Java 我得到了一个错误;HtmlEncoderTag无法解析为类型“0”;关于定义自定义标记?

Java 我得到了一个错误;HtmlEncoderTag无法解析为类型“0”;关于定义自定义标记?,java,jsp,custom-tag,Java,Jsp,Custom Tag,我正在定义一个自定义标记“htmlencoder”。我有以下文件: WEB-INF/classes/HtmlEncoderTag.jar,java代码如下: import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.tagext.BodyContent; import javax.servlet.jsp.tagext.BodyTagSupport; public clas

我正在定义一个自定义标记“htmlencoder”。我有以下文件:

WEB-INF/classes/HtmlEncoderTag.jar,java代码如下:

import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class HtmlEncoderTag extends BodyTagSupport{
    //....
}
pckage MyTag;
import java.io.IOException;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.BodyContent;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class HtmlEncoderTag extends BodyTagSupport{
    //....
}
<?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></short-name>
 <tag>
    <name>htmlencode</name>
    <tag-class>MyTag.HtmlEncoderTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
</taglib>
WEB-INF/htmlencoder.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></short-name>
 <tag>
    <name>htmlencode</name>
    <tag-class>HtmlEncoderTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
</taglib>

1
1.2
htmlencode
HtmlEncoderTag
JSP
index.jsp:

<%@ taglib uri="WEB-INF/htmlencoder.tld" prefix="htmlencoder"%>
<head>
  <title>Watch out you sinners...</title>
</head>
<html>
  <body bgcolor="white">
    <htmlencoder:htmlencode><script <% //the error refers to this line %>
      type="javascript">BadStuff()</script></htmlencoder:htmlencode>
  </body>
</html>

小心你们这些罪人。。。
坏东西
当我运行页面时,出现了错误“HtmlEncoderTag无法解析为类型”,它显示了index.jsp:7行(我在上面提到过)

我该怎么办?

两件事:

  • HtmlEncoderTag.jar应该在WEB-INF/lib中,而不是WEB-INF/classes中
  • HtmlEncoderTag是否在包中?Java代码中没有显示任何内容。但是,如果是,则标记类元素中的类名需要完全限定

  • 我找到了答案。我不确定是否有必要,但我的问题是这样解决的: 您必须将标记类放入一个包中。例如,您的HtmlEncoderTag.jar文件应该放在WEB-INF/MyTag/中,如下所示:

    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    public class HtmlEncoderTag extends BodyTagSupport{
        //....
    }
    
    pckage MyTag;
    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    public class HtmlEncoderTag extends BodyTagSupport{
        //....
    }
    
    <?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></short-name>
     <tag>
        <name>htmlencode</name>
        <tag-class>MyTag.HtmlEncoderTag</tag-class>
        <body-content>JSP</body-content>
      </tag>
    </taglib>
    
    您的tld文件如下所示:

    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    public class HtmlEncoderTag extends BodyTagSupport{
        //....
    }
    
    pckage MyTag;
    import java.io.IOException;
    import javax.servlet.jsp.JspException;
    import javax.servlet.jsp.tagext.BodyContent;
    import javax.servlet.jsp.tagext.BodyTagSupport;
    public class HtmlEncoderTag extends BodyTagSupport{
        //....
    }
    
    <?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></short-name>
     <tag>
        <name>htmlencode</name>
        <tag-class>MyTag.HtmlEncoderTag</tag-class>
        <body-content>JSP</body-content>
      </tag>
    </taglib>
    
    
    1
    1.2
    htmlencode
    MyTag.HtmlEncoderTag
    JSP
    
    我把它放在lib中,但没有区别。而且它不在一个包裹里,我应该把它放进去吗?不应该把它放在一个包裹里。是的。。。。!!我也经历了同样的事情。。。当您将“标记处理程序类”放入一个包中时,它工作得非常好。如果使用独立的标记处理程序类,它会标记错误,与“saeed”报告的错误相同。谁能解释一下原因吗。。。