我试图从 servlet 返回数据库搜索结果的 ArrayList 以显示在 jsp 页面上。
在servlet中设置arraylist作为请求的属性,并将请求转发到jsp页面。当我尝试在 jsp 页面上检索它时,它给出以下错误:
“java.util.Vector 无法转换为 java.util.ArrayList”
servlet 代码:
List<Car> ResultList=SearchPartsDAO.displaySearchResults(car);
if(ResultList.size()>=1){
request.setAttribute("ResultList", ResultList);
request.getRequestDispatcher("SearchResults.jsp").forward(request, response);
}else
response.sendRedirect("NotFound.jsp");
JSP:
<body>
<%
ArrayList<Car> resultList = new ArrayList<Car>();
resultList=(ArrayList<Car>)request.getAttribute("ResultList");
%>
<%System.out.println(resultList.get(0).getCarMake());%>
最佳答案
您还没有显示您的displaySearchResults
方法,但听起来返回一个 Vector
而不是ArrayList
。但从根本上讲,您不应该关心它返回哪个实现 - 如果您只是转换为 List<Car>
相反,你应该没问题:
<body>
<%
List<Car> resultList = (List<Car>) request.getAttribute("ResultList");
%>
<%System.out.println(resultList.get(0).getCarMake());%>
请注意我如何删除空 ArrayList
的初始分配- 如果您立即要为变量分配一个新值,那么这是毫无意义的。
使用集合接口(interface)比使用具体类更清晰 - 并且您已经在第一个代码片段中做到了这一点。 这只需要返回值实现 List<Car>
,所以当你稍后处理相同的值时,应该只有相同的要求。
还值得理解的是,您的转换为 List<Car>
有点不安全,因为它只是真正转换为 List
,由于缺乏具体化的泛型。您仍然可以获得 ClassCastException
稍后当您访问各个元素时,如果它们结果是一些非 Car
引用。不幸的是,您对此无能为力。
关于java.util.Vector 无法转换为 java.util.ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23595928/