在 JSP 中从 Object ArrayList 转换为 Object Array
Posted
技术标签:
【中文标题】在 JSP 中从 Object ArrayList 转换为 Object Array【英文标题】:Cast from an Object ArrayList to Object Array in JSP 【发布时间】:2015-11-17 09:46:33 【问题描述】:我正在尝试进行从 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)
【问题讨论】:
List<CartItems> obj = (List<CartItems>) session.getAttribute("Cart")
呢?
【参考方案1】:
您不能将 List
强制转换为数组。 List
不是数组类型。但是,您可以使用 List.toArray(T[])
并更改
session.setAttribute("Cart", cartobj);
类似
session.setAttribute("Cart", cartobj.toArray(new CartItems[cartobj.size()]));
然后
CartItems[] obj = (CartItems[])session.getAttribute("Cart");
将是有效的。
【讨论】:
【参考方案2】:您需要像这样将其转换为 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 的定义不正确。
【讨论】:
【参考方案3】:您将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>
【讨论】:
以上是关于在 JSP 中从 Object ArrayList 转换为 Object Array的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 中从 ArrayList 中切出 ArrayList?