在JSP

时间:2015-08-24 04:16:24

标签: java arrays list jsp arraylist

我正在尝试从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)

3 个答案:

答案 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>