0

我正在定义一个自定义标签“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{
    //....
}

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>

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 行(我在上面提到过)。

我该怎么办?

4

2 回答 2

1

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

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{
    //....
}

您的 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>MyTag.HtmlEncoderTag</tag-class>
    <body-content>JSP</body-content>
  </tag>
</taglib>
于 2011-08-06T07:28:23.520 回答
0

两件事情:

  1. HtmlEncoderTag.jar 应该在 WEB-INF/lib 中,而不是 WEB-INF/classes 中。
  2. HtmlEncoderTag 是否在一个包中?Java 代码中没有显示任何内容。但是,如果是,则 tag-class 元素中的类名需要完全限定。
于 2011-08-03T07:17:11.310 回答