2015-04-28 2 views
0

Я новичок в Java.Показать класс ArrayList на странице JSP

То, что я пытаюсь достичь, - это ввести код продукта с веб-страницы JSP (index.jsp), вызвать сервлет (getDetails) и получить описание и баланс для нескольких позиций из серии DB2-I sedrver

В Servlet для описания Я использую Map, но для получения баланса нескольких местоположений я использую собственный класс ArrayList (displayOnHand).

Данные получают должным образом захваченные на странице сервлета для баланса в нескольких местах, но когда я делаю setAttribute в Servlet и getAttribute в JSP для того же самого, я не могу извлекать данные как одно поле за раз.

Может кто-то помочь мужчинам.

Ниже мой код

-------- getDetails Servlet ------------------ 


public class getDetails extends HttpServlet { 

    /** 
    * Processes requests for both HTTP <code>GET</code> and <code>POST</code> 
    * methods. 
    * 
    * @param request servlet request 
    * @param response servlet response 
    * @throws ServletException if a servlet-specific error occurs 
    * @throws IOException if an I/O error occurs 
    */ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    try (PrintWriter out = response.getWriter()) { 
     /* TODO output your page here. You may use following sample code. */ 
     /* write your code here */ 

     Map < String, String > messages = new HashMap < String, String >(); 
     ArrayList columnNames = new ArrayList(); 
     displayOnHand data = new displayOnHand(); 
     ArrayList <displayOnHand> dataList = new ArrayList <displayOnHand>(); 

     String scanSKU = request.getParameter("SKUScan"); 
     if (scanSKU == null || scanSKU.trim().isEmpty()) { 
     messages.put("scanSKU", "Please Enter SKU/UPC/EAN Code"); 
     } 

     if (messages.isEmpty()) { 

     String driver = getServletContext().getInitParameter("driver"); 
     String connectionString = getServletContext().getInitParameter("connectionString"); 
     String username = getServletContext().getInitParameter("username"); 
     String password = getServletContext().getInitParameter("password"); 

     try { 
      Class.forName(driver); 
      Connection conn = DriverManager.getConnection(connectionString, username, password); 
      Statement stmt = conn.createStatement(); 
      String rsstmt = "select IDESCR from mm510lib.invmst where inumbr =" + scanSKU; 
      ResultSet rs = stmt.executeQuery(rsstmt); 

      String SKUName = ""; 
      while (rs.next()) { 
      SKUName = rs.getString(1); 
      } 
      //String SKUName = rs.getString(1); 
      messages.put("SKUDescription", SKUName); 
      stmt = conn.createStatement(); 
      rsstmt = "select istore, IBHAND from mm510lib.invbal where inumbr =" + scanSKU; 
      rs = stmt.executeQuery(rsstmt); 

      ResultSetMetaData md = rs.getMetaData(); 
      int columns = md.getColumnCount(); 

      // Get column names 
      //for (int i = 1; i <= columns; i++) { 
      // columnNames.add(md.getColumnName(i)); 
      // } 
      // Get row data 
      //while (rs.next()) { 
      // ArrayList row = new ArrayList(columns); 
      // for (int i = 1; i <= columns; i++) { 
      //  row.add(rs.getObject(i)); 
      // } 
      // data.add(row); 
      //} 
      while (rs.next()) { 
      //displayOnHand data = new displayOnHand(); 
      data.setLocationCode(rs.getInt(1)); 
      data.setOnhand(rs.getInt(2)); 
      dataList.add(data); 
      } 
      rs.close(); 
      stmt.close(); 
      conn.close(); 
     } catch (ClassNotFoundException | SQLException ex) { 
      Logger.getLogger(getDetails.class.getName()).log(Level.SEVERE, null, ex); 
      messages.put("connection", "Connection to Database could not be established"); 
     } 

     request.setAttribute("messages", messages); 
     request.setAttribute("onHandClass", data); 
     request.setAttribute("OnHandDetails", dataList); 
     request.getRequestDispatcher("index.jsp").forward(request, response); 
     } 
    } 
    } 


---------------------------------------------------- index.jsp ---------------------------------------------------- 


<%@page import="java.util.List" %> 
    <%@page import="java.sql.Array" %> 
    <%@page import="java.util.Locale.Category" %> 
     <%@page import="java.util.ArrayList" %> 
     <%@page import="JavaPackages.*" %> 
      <%@page contentType="text/html" pageEncoding="UTF-8" %> 
      <!DOCTYPE html> 
      <html> 

      <head> 
       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
       <title>Store MIS V0.1</title> 
       <link href="css/index.css" rel="stylesheet" type="text/css" /> 

       <script type='text/javascript'> 
       function isNumber(evt) { 
        evt = (evt) ? evt : window.event; // for IE 
        var charCode = (evt.which) ? evt.which : evt.keyCode; 
        if (charCode > 31 && (charCode < 48 || charCode > 57)) { 
        return false; 
        } 
        return true; 
       } 
       </script> 
      </head> 

      <body> 
       <div class="hypLogo"> 
       <img src="images/logo.jpg" alt="" /> 
       </div> 
       <div class="container"> 
       <div class="pageHeader"> 
        <h1>Store MIS</h1> 
        <form action="getDetails.do" method="POST"> 
        <p> 
         <input type="text" name="SKUScan" value="" placeholder="Scan SKU" onkeypress="return isNumber(event)" /> 
        </p> 

        <span class="error">${messages.scanSKU}</span> 
        <p class="submit"> 
         <input type="submit" name="commit" value="Enter"> 
        </p> 
        <span class="error">${messages.connection}</span> 
        <span class="error">${messages.SKUDescription}</span> 
        </form> 
       </div> 
       </div> 
       <% out.println("in Script"); if (request.getAttribute("OnHandDetails") !=n ull) { // retrieve your list from the request, with casting ArrayList<displayOnHand>list = (ArrayList 
       <displayOnHand>) request.getAttribute("OnHandDetails"); displayOnHand tempData = new displayOnHand() ; out.println("Array Size" + list.size()); // print the information about every category of the list for (int i = 0; i 
        < list.size(); i++) { tempData.equals(list.get(i)); 
        } } %> 
      </body> 

      </html> 

------------- displayOnHand Class --------------- 

public class displayOnHand { 

private int storeNumber; 
private int onHandBal; 

public displayOnHand() { 

} 

public void setLocationCode(int strNum) { 
    storeNumber = strNum; 
} 

public int getLocationCode() { 
    return storeNumber; 
} 

public void setOnhand(int onHand) { 
    onHandBal = onHand; 
} 

public int getOnHand() { 
    return onHandBal; 
} 
} 

ответ

0

Вы можете добавить экземпляр продукта в список, например. List<Product> productList = new ArrayList<Product>(); и добавьте продукт как productList.add(p); где p - это любой экземпляр продукта. Для использования дисплея для цикла, например.

for(i=0;i<productList.size();i++) 
{ 
Product product = list.get(i); 
out.println(product.price); 
out.println(product.id); 
} 
+0

Это было так просто, я пробовал много сложных способов сделать это. Спасибо еще раз. –

+0

принять мой ответ –

0

Вы можете использовать JSTL библиотеку тегов перебрать ArrayList. Например, вы можете использовать тег c:forEach.

+0

Спасибо за возвращение, но я не знаком с JSTL, хотел бы что-то в JSP. –

+0

@ KapilTulsan: JSTL - это просто часть, которая позволяет создавать условия и циклы в JSP. Вы не сможете сделать серьезный JSP без него. Конечно, вы могли бы использовать скрипты вместо JSTL, но, пожалуйста, ** даже не пытайтесь **: он подвержен ошибкам и дает возможность читать JSP. –

+0

Спасибо @SergeBallesta, но на данный момент я бы не пробовал себя на JSTL, если бы какой-либо код сглаживания помог бы мне исправить его на данный момент. –

0

для итерации вы также можете использовать для петли , например.

for(i=0;i<list.size();i++) 
out.println(list.get(i)); 

ИЛИ

вы также можете использовать JSTL тег, как @vivek упоминалось

+0

вы можете добавить экземпляр продукта в список, например. –

0

Вы действительно должны попробовать использовать JSTL.

Это так просто, как (украдено из JSTL c:forEach printing ${}):

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 

<html> 
<head> 
    <title></title> 
</head> 
<body> 

Hello from products page.<br/> 

<c:forEach var="prod" items="${products}"> 
    ${prod.price} 
    ${prod.id} 
</c:forEach> 


</body> 
</html> 

С хорошим файлом XML.

Если вы действительно не можете использовать JSTL, это было бы:

<%@ page contentType="text/html;charset=UTF-8" language="java" %> 
<%@page import="java.util.List"%> 
<%@page import="package.to.Product"%> 

<html> 
<head> 
    <title></title> 
</head> 
<body> 

Hello from products page.<br/> 
<% 
    List<Product> products = (List<Product>) request.getAttribute("products"); 
    for (Product prod: products) { 
     page.setAttribute("prod", prod); 
%> 
    ${prod.price} 
    ${prod.id} 
<% } %> 

</body> 
</html> 

Довольно некрасиво это не так (и я даже не проверял)? Поверьте мне: если вы действительно не можете сделать по-другому избегайте скриптлетов!

Смежные вопросы