我正在尝试从ArrayList到Object Array进行简单的转换,但是我收到了一个错误,我尝试了很多方法,如在互联网上提到但没有一个工作,需要帮助
这就是我正在做的事情
private List<CartItems> cartobj = new ArrayList<CartItems>();
--- Bean (Cart) ---
private String name;
private float price;
private int quantity;
--- In Servlet ---
Order h = new Order(String a, String b, String c);
cartobj.add(h);
session.setAttribute("Cart", cartobj);
--- In JSP ---
<tbody>
<% ArrayList<CartItems> cartobj = new ArrayList<CartItems>();
cartobj.add((CartItems)session.getAttribute("Cart"));
for(int i=0;i<cartobj.size();i++)
{%>
<tr>
<td><% out.println(i+1); %></td>
<td><% cartobj.get(i).getProductName(); %></td>
<td><% cartobj.get(i).getPrice(); %></td>
<td><% cartobj.get(i).getSales_Address(); %></td>
<td><% cartobj.get(i).getOrder_Date(); %></td>
<td><% cartobj.get(i).getQuantity(); %></td>
</tr>
<% } %>
我也试过这个
<%
CartItems[] obj = (CartItems[])session.getAttribute("Cart");
for(int i=0;i<obj.length;i++)
{%>
<tr>
<td><% out.println(i+1); %></td>
<td><% obj[i].getProductName(); %></td>
<td><% obj[i].getPrice(); %></td>
<td><% obj[i].getSales_Address(); %></td>
<td><% obj[i].getOrder_Date(); %></td>
<td><% obj[i].getQuantity(); %></td>
</tr>
<% } %>
我收到以下错误
SEVERE: Servlet.service() for servlet [jsp] in context with path [/Final_Project] threw exception [java.lang.ClassCastException: java.util.ArrayList cannot be cast to [LObjects.CartItems;] with root cause
java.lang.ClassCastException:java.util.ArrayList无法强制转换为[LObjects.CartItems; 在org.apache.jsp.cart_jsp._jspService(cart_jsp.java:165)
答案 0 :(得分:2)
您无法将List
投射到数组中。 List
不是一种数组。但是,您可以使用List.toArray(T[])
并更改
session.setAttribute("Cart", cartobj);
类似
session.setAttribute("Cart", cartobj.toArray(new CartItems[cartobj.size()]));
然后
CartItems[] obj = (CartItems[])session.getAttribute("Cart");
是有效的。
答案 1 :(得分:1)
你需要将它像这样投射到List:
List<CartItems> obj = (List<CartItems>) session.getAttribute("Cart");
最好使用JSTL直接迭代您的对象列表:
<c:forEach items="${Cart}" var="element">
<tr>
<td>${element.productName}</td>
<td>${element.salesAddress}</td>
<td>${element.quantity}</td>
</tr>
</c:forEach>
遵循setter和getter的Java bean命名约定,例如,getSales_Address没有正确定义。
答案 2 :(得分:0)
您要将List<CartItems>
设置为会话,ArrayList
无法使用Array
投放。
尝试以下方法:
<%
List<CartItems> obj = (List<CartItems>)session.getAttribute("Cart");
for(int i=0;i<obj.length;i++)
{
CartItems cartItem = obj.get(i);
%>
<tr>
<td><% out.println(i+1); %></td>
<td><% cartItem.getProductName(); %></td>
<td><% cartItem.getPrice(); %></td>
<td><% cartItem.getSales_Address(); %></td>
<td><% cartItem.getOrder_Date(); %></td>
<td><% cartItem.getQuantity(); %></td>
</tr>
<% } %
尽可能避免在jsp中使用java代码。您可以使用JSTL
实现此目的。
<c:forEach items="${Cart}" var="c" varStatus="loop">
<tr>
<td>${loop.index+1}</td>
<td>${c.productName}</td>
<td>${c.price}</td>
<td>${c.sales_address}</td>
<td>${c.quantity}</td>
</tr>
</c:forEach>