我有一个jsp页面(说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>
<%
//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.jsp
和servlet123
之间的乒乓一样。问题是,当第二次到达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中省略for循环并将其更改为 -
<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.jsp
和servlet123
之间的所有关系都可以正常工作。
答案 0 :(得分:2)
这是一种方法。
JSP代码如下
不是在请求中再次设置arraylist,而是可以按如下方式在会话中设置它
session.setAttribute("ownerList",ownerList) ;
在for循环中使用之前,您可以检查arraylist是否为null。
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
也可能有其他方法。这个更接近你选择的那个。