<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="mytag" uri="helloworld"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'iterator.jsp' starting page</title>
    
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">    
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->  </head>
  
  <body>
    <h2>简单标签</h2>
    <hr>
    <%
     List<String> a = new ArrayList<String>();
     a.add("hello");
     a.add("world");
     a.add("java");
    
     pageContext.setAttribute("a", a);
     %>
     <table border="1">
     
      <mytag:myIterator bean="a">
     
      <tr>
      <td>${pageScope["item"]}</td>
      </tr>
      </mytag:myIterator>
     
     </table>
     <mytag:helloworld1/>
  </body>
</html>运行时报错:
2011-12-7 15:37:02 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /iterator.jsp(38,6) jasper.error.bad.bodycontent.type
at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1649)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:978)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1246)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1422)
at org.apache.jasper.compiler.Parser.parse(Parser.java:130)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:185)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:321)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:592)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:328)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:877)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:594)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1675)
at java.lang.Thread.run(Thread.java:619)
-----------------------
看不出38行有什么错啊,谁来提示一下。

解决方案 »

  1.   

    补充一下,38行是: <mytag:myIterator bean="a">,看不出有什么语法问题。
      

  2.   

    不是代码本身的问题,是你的tld文件有问题,在标签中<tag>
    <name>myIterator</name>
    <tagclass>...</tagclass>
    <bodycontent>jsp</bodycontent>红字部分应该写jsp,如果你写的是empty就会出这样的错误
      

  3.   

    没想到没有出红字,就是这一部分jsp,即bodycontent中的内容
      

  4.   

    用jsp也会报错。用tagdependent不会报错,但是 不会输出${pageScope["item"]}的结果,怎么回事?
      

  5.   

    具体原因不清楚,你可以考虑一下几个方面
    1.是jsp时,错误跟现在的一样吗?
    2.在标签处理方法(tagstart,tagend)中返回的值是否正确
      

  6.   

    按照你的标签要表达的意思,你的doStartTag方法应该返回EVAL_BODY_INCLUDE
      

  7.   

    我用的是简单标签,继承的是SimpleTagSupport,重写的是doTag()方法。
      

  8.   

    发现问题了,没有在tld文件中配置bean。