【问题标题】:Cast from an Object ArrayList to Object Array in JSP在 JSP 中从 Object ArrayList 转换为 Object Array
【发布时间】: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") 呢?

标签: java arrays list jsp arraylist


【解决方案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>
      

      【讨论】:

        猜你喜欢
        • 2014-05-09
        • 2012-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 1970-01-01
        • 2015-04-25
        • 1970-01-01
        相关资源
        最近更新 更多