java - 使用servlet和DAO时ArrayList不显示在jsp页面中

标签 java jsp servlets dao

我在 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 条要显示的内容)。谁能告诉我哪里做错了。

谢谢!

最佳答案

在您的 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);
        }

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

关于java - 使用servlet和DAO时ArrayList不显示在jsp页面中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35811043/

相关文章:

java - 使用 Richfaces 进行盲注和盲注时出现问题

java - jQuery 或 JavaScript 中的 JSTL

java - 使用服务器进行回合制游戏 (Android) - 如何存储数据?

javascript - Java-将javascript连接到servlet

java - 幻象引用的实际用途是什么——JAVA?

java - 为什么我的反向链表方法不能多次工作?

java - Hibernate设置 boolean 值

java - 如何调用另一个项目的项目类?

javascript - Struts 2 使用 javascript 获取单选按钮值

rest - 如何使用 Ceylon 编写 Web 应用程序?