我正在尝试从servlet返回数据库搜索结果的ArrayList,以显示在jsp页面上。
将arraylist设置为servlet中的请求的地址,并将请求转发到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());%>
答案 0 :(得分:6)
您尚未显示displaySearchResults
方法,但听起来似乎返回Vector
而不是ArrayList
。但从根本上说,你不应该关心它返回的实现 - 如果你只是转向List<Car>
,你应该没问题:
<body>
<%
List<Car> resultList = (List<Car>) request.getAttribute("ResultList");
%>
<%System.out.println(resultList.get(0).getCarMake());%>
请注意我是如何删除空ArrayList
的初始分配 - 如果您立即 将分配给新值,那么这一点毫无意义无论如何,变量。
在集合界面方面比具体类更干净 - 你已经在第一段代码中做到了这一点。 那个只要求返回值实现List<Car>
,所以在以后处理相同的值时,你应该只有相同的要求。
同样值得理解的是,您对List<Car>
的演员有点不安全,因为它只有真的投射到List
,因为缺乏具体的仿制药。当您访问单个元素时,如果结果是某些非ClassCastException
引用,您仍然可以获得Car
。不幸的是,你不能做很多事情。
答案 1 :(得分:2)
displaySearchResults()方法返回一个Vector,它是一种List,但与ArrayList不同。
在JSP中,您应该将resultList声明为List而不是ArrayList - 然后DAO使用哪个List实现并不重要。对于变量声明,使用最通用的类型(即List而不是Vector或ArrayList),返回类型和参数通常是一种很好的做法。