java - 运行经典标签处理程序时出现问题

标签 java jsp tomcat tags

我想通过扩展类 BodyTagSupport 从标签处理程序中在自定义标签名称 Simple 中显示 JSP 的正文值,但得到运行时异常;o)

JSP 代码是:

<html><body>
<%@ taglib prefix="mine" uri="simpleTags" %>

Advisor page
<mine:simple>
Balle Balle
</mine:simple>
</html></body>

标签处理类是:

package foo;

import java.io.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

public class SelectTagHandler extends BodyTagSupport
{
public int doStartTag() throws JspException{

return EVAL_BODY_BUFFERED;
}

public int EndTag()
{
try{
pageContext.getOut().print(bodyContent);
}
catch(Exception e)
{
}
return EVAL_PAGE;
}

我得到的异常是:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

org.apache.jasper.JasperException: foo.SelectTagHandler.setJspContext(Ljavax/servlet/jsp/JspContext;)V
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

javax.servlet.ServletException: foo.SelectTagHandler.setJspContext(Ljavax/servlet/jsp/JspContext;)V
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)
    org.apache.jsp.new_jsp._jspService(new_jsp.java:60)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

root cause

java.lang.NoSuchMethodError: foo.SelectTagHandler.setJspContext(Ljavax/servlet/jsp/JspContext;)V
    org.apache.jsp.new_jsp._jspx_meth_mine_005fsimple_005f0(new_jsp.java:73)
    org.apache.jsp.new_jsp._jspService(new_jsp.java:51)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.27 logs.

编辑:我的 TLD 文件的代码是:

<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0">

<tlib-version>1.2</tlib-version>
<uri>simpleTags</uri>
<tag>
<name>simple</name>
<tag-class>foo.SelectTagHandler</tag-class>
<body-content>scriptless</body-content>
</tag>
</taglib>

我在这里做错了什么?

最佳答案

setJspContext 只适用于SimpleTagSimpleTagSupport,不适用于BodyTag(不要问我为什么)。出于某种原因,Tomcat 将您的标签视为 SimpleTag。问题可能出在您的 TLD 文件中,您可以修改您的问题以添加它吗?

关于java - 运行经典标签处理程序时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1181622/

相关文章:

web-services - 从 jsp 调用 Jasper Server 报告

带有 ActiveMQ 代理的 Tomcat Web 应用程序

java - NoClassDefFoundError : org/springframework/aop/framework/AbstractAdvisingBeanPostProcessor

java - JAXB - 生成的类实现接口(interface)

java - iText 版本 4.2.1 在 Maven 中央存储库中重定向

java - SWT - asyncExec 将输出定向到列表小部件

java - 使用 SwingFXUtils 将 BufferedImage(awt) 转换为 Image(JavaFx)

java - 为什么我总是出现 SQL 参数索引超出范围异常?

java - struts 从 bean 生成表单元素

windows - Apache Tomcat 错误 : Socket bind failed