我在JSP内写了    <%  {List list=(List)request.getAttribute("list"); %>
          <% Iterator i=list.iterator(); 
           while (i.hasNext()){ 
              SongBean song = (SongBean)i.next(); 
            %> 
    <tr> <td> <%=song.getId()%> </td> 
           </tr> 
        <%}%>  
写了这段后报错,页面内表格不见了,执行后又出现了 报的错误如下,告诉下怎么解决:::谢谢java.lang.NullPointerException
at org.apache.jsp.Main_jsp._jspService(org.apache.jsp.Main_jsp:547)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
2009-4-28 18:09:01 org.apache.catalina.core.StandardWrapperValve invoke

解决方案 »

  1.   

    去查查servlet传过来list之前,list有没有没有赋值的变量
      

  2.   

    song.getId() 拿到的是空值.....也就是说你没有传值过去.
    你也可以在后台打印出来...一句
    System.out.println(song.getId());就行了.
      

  3.   

    [com.bean.SongBean@16f5b17, com.bean.SongBean@1c55e69, com.bean.SongBean@b950d1, com.bean.SongBean@68dc2d, com.bean.SongBean@4f0f97, com.bean.SongBean@889c4e, com.bean.SongBean@cdf872, com.bean.SongBean@7227a8, com.bean.SongBean@899e6a, com.bean.SongBean@ff665a, com.bean.SongBean@198c113, com.bean.SongBean@1abcd5e, com.bean.SongBean@37eaab, com.bean.SongBean@10f80a9, com.bean.SongBean@c803e6, com.bean.SongBean@1780f30, com.bean.SongBean@12d297a, com.bean.SongBean@1fe3238, com.bean.SongBean@19331eb, com.bean.SongBean@b27bb5, com.bean.SongBean@1d7ce63, com.bean.SongBean@12ecba8, com.bean.SongBean@13c8540, com.bean.SongBean@504f3c, com.bean.SongBean@820a0c, com.bean.SongBean@161d282, com.bean.SongBean@14362d9]
    list内的东西
      

  4.   

    怎么解决呢,上面是打印出来的list  照理说有值
      

  5.   

    看一下你相应的Action中有没有
    request.setAttribute("list",yourList);
    return mapping.findForward("你现在的页面");
    同时在你的SongBean中有相应的getid()方法
      

  6.   

    <%{
        List list=(List)request.getAttribute("list"); 
        if(list == null){
            out.print("list is null");
            return;
        }else{
        Iterator i=list.iterator(); 
        while (i.hasNext()){ 
            SongBean song = (SongBean)i.next(); 
            if(song == null){
                out.print("song is null");
                return;
            }else{
    %> 
        <tr> 
            <td> <%=song.getId()%> </td> 
        </tr> 
    <%}}}%>
    加上一些判空值语句,就算是空指针也应该也可显示页面了,
    但我始终认为在页面中用JSP显示方式不好,还是用JSTL吧
    <c:if test="${!empty list}">
         <c:forEach items="${list}" var="songBean">
            <c:if test="${!empty songBean}">
                <tr><td>${songBean.id}</td>
            </c:if>
        </c:forEach>
    </c:if>
      

  7.   

    先测试list是否有值在里面,如果没有值,下面就会引发空指针的异常了。
      

  8.   

    看一下有没有把SongBean所在的包导进JSP页面
    再看一下你相应的Action中有没有 
    request.setAttribute("list",yourList); 
    然后看一下list是否有值了
      

  9.   

     <% Iterator i=list.iterator(); 
              while (I!=NULL && i.hasNext()){               SongBean song = (SongBean)i.next(); 
                %> 
        <tr> <td> <%=song.getId()%> </td> 
              </tr> 
            <%}%>  
      

  10.   

    request.getAttribute("list")会不会是空值
      

  11.   

    估计多半是list集合没传过来。。你仔细查下
      

  12.   

    你可以打印下list.size(),看看值是多少,若是0则list里没有值啊。
    再看看你是不是用request.setAttribute();保存的,有的时候这个也会出问题的。