在 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&lt;CartItems&gt; obj = (List&lt;CartItems&gt;) 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&lt;CartItems&gt; 设置为会话,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?

在 Java 中从 ArrayList 中删除对象

如何在 Hibernate、Spring、JSP 中从 db 中获取多行?

在主活动中从 JSON 访问 null ArrayList

如何在 JSP 页面中从数据库中检索和显示图像?

在 JSP 中迭代 ArrayList