2012-08-11 30 views
0

我有一個jsp頁面(說,MyJspPage.jsp) -對ArrayList的循環改變對象

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<% 
    ArrayList<Person> ownerList = (ArrayList<Person>) request 
      .getAttribute("ownerList"); 
    //set again .. 
     request.setAttribute("ownerList",ownerList) ; 

%> 
</head> 
<body> 
     <% 
      //itr on all the persons ..; 
      for (Person person : ownerList) { 
     %> 
        // some HTML code.. 
     <% 
      } 
     %> 
      <form action="servlet123" method="POST"> 
        // some fields .. 
        <input type="submit" value="join" /> 
    </form> 

</body> 
</html> 

和一個servlet -

@WebServlet("/servlet123") 
public class servlet123 extends HttpServlet { 
    private static final long serialVersionUID = 1L; 


    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     // get the then set .. 
      ArrayList<Person> ownerList = (ArrayList<Person)request.getAttribute("ownerList"); 
     request.setAttribute("ownerList", ownerList); 
      // forward to `MyJspPage.jsp` 
      dispather.forward(request, response); 
     } 

} 

首先另一個servlet着MyJspPage.jsp,它做工精細,那麼就有像MyJspPage.jspservlet123之間的乒乓球。問題是,當在第二次reachs到MyJspPage.jsp它拋出一個異常 -

type Exception report 

message java.lang.NullPointerException 

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

exception 

org.apache.jasper.JasperException: java.lang.NullPointerException 
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:549) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:470) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

應當注意的是,當我省略了從MyJspPage.jsp循環並改變它是 -

<html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
    <% 
     ArrayList<Person> ownerList = (ArrayList<Person>) request 
       .getAttribute("ownerList"); 
     //set again .. 
      request.setAttribute("ownerList",ownerList) ; 

    %> 
    </head> 
    <body> 
       <form action="servlet123" method="POST"> 
         // some fields .. 
         <input type="submit" value="join" /> 
     </form> 

    </body> 
    </html> 

MyJspPage.jspservlet123之間的所有關係都可以正常工作。

+0

我首先檢查ownerList是否不爲空,確保它已傳遞到您的頁面 – MadProgrammer 2012-08-11 21:53:11

+2

請求對象是每個請求的新對象。您應該保存並從會話中檢索列表。 – 2012-08-11 21:56:44

+0

@BheshGurung有沒有辦法根據要求做到這一點? – URL87 2012-08-11 22:00:38

回答

2

這是一種方法。

JSP代碼如下


而是在請求重新設置的ArrayList,您可以在會話如下 session.setAttribute("ownerList",ownerList) ;

您可以檢查該ArrayList是NOT NULL設置然後在for循環中使用它。

 if (ownerList != null) 
     { 
      for (Person person : ownerList) { 
    %> 
       // some HTML code.. 
    <% 
      } 
     } 
    %> 

在servlet中,你可以編寫代碼爲

HttpSession session = request.getSession(false); 
ArrayList<Person> ownerList = (ArrayList<Person)session.getAttribute("ownerList"); 
request.setAttribute("ownerList", ownerList); 
session.setAttribute("ownerList", null); // toremove unnecessary code from the session 

可能有其他的辦法還。這個更接近你選擇的那個。