【问题标题】:ArrayList not show in jsp page when used servlet , and DAO使用 servlet 和 DAO 时,ArrayList 不显示在 jsp 页面中
【发布时间】:2016-06-19 01:45:27
【问题描述】:

我在 DAO 中创建了 Arraylist,并在 servlet 中使用了这个列表。数组列表的结果显示在 jsp 页面中。

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;
    }
}

这个数组列表传入下面给出的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");
        }
    }
}

还有我想在其中显示 ArrayList 的 userProfile.jsp 页面,如下所示:

<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 个要显示的东西)。谁能告诉我我在哪个地方做错了。

谢谢!

【问题讨论】:

  • 你能发布你的代码吗?你到目前为止所做的工作。

标签: java jsp servlets dao


【解决方案1】:

在您的 JSP 中,您正在使用

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

因此,这意味着 JSP 期望列表的每个元素都是具有以下方法的对象:

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

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

但这不是列表包含的内容。该列表是List&lt;String&gt;。它应该是List&lt;User&gt;。顺便说一句,您还应该尊重 Java 命名约定。所以,把你的代码改成

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

这样,结果集中的每一行都成为一个用户对象。

【讨论】:

  • 另外,您的 ListDAO 构造函数正在泄漏连接
  • 我已经尝试了你的建议,它部分工作。我创建了一个 bean 类,在其中创建一个对象及其 setter 和 getter 函数,并在 while 循环中的 DAO(如您所说)中创建 bean 对象并调用该函数。 jsp中显示的所有列表参数,除了“名称”。当我在 jsp 页面中编写 ${user.name} 时,它会显示空白页面。将显示除“名称”之外的所有数据。
  • 那你的代码肯定有bug(或者数据库中的名字确实为null/blank)。但是没有看到代码,我怎么能帮忙呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 2014-06-30
  • 2015-04-02
  • 2012-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多