2016-03-05 51 views
0

我已經在DAO中創建了Arraylist,並在servlet中使用了此列表。數組列表的結果顯示在jsp頁面中。當使用servlet時,ArrayList不會顯示在jsp頁面中,而DAO

DAO

package com.dao; 

import com.database.DBConnection; 
import com.mysql.jdbc.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 
import java.sql.SQLException; 
import java.util.ArrayList; 

public class ListDAO { 
    String status=null; 
    Connection con= null; 
    PreparedStatement pst=null; 
    ResultSet rs = null; 

    private DBConnection conn; 

    public ListDAO() { 
     con = DBConnection.getConnection(); 
    } 

    public ArrayList<String> getAllUser() throws SQLException { 

     ArrayList<String> allUser = new ArrayList<String>(); 

     try { 
      con = DBConnection.getConnection(); 
      String queryList = "SELECT name, last_name, zip, phone_no, start_time, end_time, quantity," + 
           "type, order, logo FROM Database.user_info"; 

      pst = con.prepareStatement(queryList); 

      rs = pst.executeQuery(); 

       while (rs.next()) { 

       allUser .add(rs.getString("name")); 
       allUser .add(rs.getString("last_name")); 
       allUser .add(rs.getString("zip")); 
       allUser .add(rs.getString("phone_no")); 
       allUser .add(rs.getString("start_time")); 
       allUser .add(rs.getString("end_time")); 
       allUser .add(rs.getString("quantity")); 
       allUser .add(rs.getString("type")); 
       allUser .add(rs.getString("order")); 
       allUser .add(rs.getString("logo")); 
      } 
     } 
     catch (SQLException e) { 
      e.printStackTrace(); 
     } 
     finally { 
      if(rs!=null) { 
       try { 
        rs.close(); 
       } catch(SQLException logOrIgnore) {} 
      } 
      if(pst!=null) { 
       try { 
        pst.close(); 
       } catch (SQLException logOrIgnore) {} 
      } 
      if(con!=null) { 
       try { 
        con.close(); 
       } catch(SQLException logOrIgnore) {} 
      } 
     } 
     return allUser; 
    } 
} 

此ArrayList通在servlet其中如下:

的Servlet

package com.servlet; 

import com.dao.ListDAO; 
import com.database.DBConnection; 
import com.mysql.jdbc.Connection; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.SQLException; 
import java.util.ArrayList; 
import javax.servlet.ServletException; 
import javax.servlet.annotation.WebServlet; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
import javax.servlet.http.HttpSession; 

@WebServlet("/checkLogin") 
public class LoginServlet extends HttpServlet { 

    Connection con= null; 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 


     ListDAO Vendors = new ListDAO(); 

     if(!userValidate.equals("FALSE")) { 

       //Login verified user 

      try { 
       con = DBConnection.getConnection(); 
      ArrayList<String> allUser = Vendors.getAllUser(); 

      request.setAttribute("allUser", allUser); // Will be available as ${allUser} in JSP 
      System.out.println(allUser); 
      request.getRequestDispatcher("userProfile.jsp").forward(request, response); 
      } 
      catch (SQLException ex) { 
       throw new ServletException("Cannot obtain allUser from Database", ex); 
      }  
     } 
     else { 
       response.sendRedirect("login.jsp"); 
     } 
    } 
} 

而且userProfile.jsp頁面中,我想展示ArrayList如下:

<c:forEach var="user" items="${allUser}"> 
    <div class="col-md-5"> 
      <img src="Resources/images/logo/logo1.jpg" alt="Logo1"> 
      <h2>${user.name} ${user.last_name}</h2> 
      <p>${user.zip}, ${user.phone_no}, ${user.start_time}, ${user.end_time}</p> 
      <p>${user.quantity}, ${user.type}, ${user.order}, ${user.logo}</p> 
    </div> 
</c:forEach> 

問題是整個數組列表是在單個數組中,這就是爲什麼要在jsp頁面中顯示數組的問題。我想單獨顯示每個用戶的個人記錄(每個用戶都有10件事情要顯示)。誰能告訴我我在哪個地方做錯了事。

謝謝!

+0

你可以發佈你的代碼嗎?迄今爲止所做的工作。 – Dhruv

回答

1

在JSP中,你使用

${user.name} ${user.last_name} 

所以,這意味着,JSP期望列表中的每個元素與下列方法的對象:

public String getName() { 
    return this.name; 
} 

public String getLast_name() { 
    return this.lastName; 
} 

但是,這不是列表包含的內容。該列表是List<String>。它應該是一個List<User>。您還應該尊重Java命名約定。因此,將您的代碼更改爲

 while (rs.next()) { 
      User user = new User(); 
      user.setName(rs.getString("name")); 
      user.setLastName(rs.getString("last_name")); 
      ... 
      allUser.add(user); 
     } 

這樣,結果集的每一行都將成爲用戶對象。

+0

此外,您的'ListDAO'構造函數泄漏連接 – epoch

+0

謝謝,JB Nizet! –

+0

我嘗試了你的建議,它部分工作。我創建了一個bean類,在該類中創建一個對象及其setter和getter函數,並在while循環中調用該函數並在DAO中創建bean的對象(如您所說)。在jsp中顯示的所有列表參數除「名稱」外。當我在jsp頁面中寫入$ {user.name}時,它顯示空白頁面。除「名稱」外,所有數據都將顯示。 –

相關問題