基本上我有这个功能,允许人们根据用户名搜索其他用户。您键入文本框id =“search”,它将查找具有该用户名/类似用户名的用户:
<form name="searchForm" action="searchUser" method="post">
<input type="text" id="search" name="search" placeholder="Search.." />
<input type="submit" id="searchButton" name="searchButton" value="Search!" onclick="searchUsers()"/>
</form>
这是映射到action searchUser的servlet SearchUserServlet。静态方法searchUser(string)返回用户对象的arraylist。我试图将这个arraylist传递给QuickMatchResult.jsp:
public class SearchUserServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response){
try {
String name=request.getParameter("search");
ArrayList<User> userList= User.searchUser(name);
RequestDispatcher dispatcher=request.getRequestDispatcher("/QuickMatchResult.jsp");
request.getSession().setAttribute("userList",userList);
dispatcher.forward(request, response);
} catch (ServletException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
这是转发它的QuickMatchResult.jsp。我试图在arraylist中显示用户对象的所有用户名:
<table id="searchResults">
<% ArrayList<User> userList= new ArrayList<User>();
userList=(ArrayList<User>)request.getAttribute("userList");
for (int i=0; i<userList.size();i++){
User user=userList.get(i);
%>
<tr>
<td><%=user.getUserName()%></td>
</tr>
<%
}
%>
</table>
但是,当我尝试运行它时,我得到一个空指针异常。知道为什么吗?
您将userList放在会话对象中并尝试从请求对象中检索它。从会话中获取此列表而不是请求.Below应该有所帮助
userList=(ArrayList<User>)session.getAttribute("userList");
您已在会话中设置属性,而不是在请求中。使用
request.setAttribute("userList", userList);
或者如果要使用会话,则在JSP中检索会话属性。
session.getAttribute("userList");
当我们尝试在对象引用上调用一个不引用对象的方法时,我们得到NullPointerException
。即null
。
在您的情况下,您尝试从userList
对象中检索名为request
的属性,但在request
中没有任何属性。如果getAttribute
找不到该属性,则返回null