2012-08-11 63 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 

可能有其他的办法还。这个更接近你选择的那个。