Jadi, saya telah berjuang selama 2 hari untuk memahami apa kesalahan saya. Daftar drop-down saya tidak terisi dengan data dari database. Saya menggunakan Java EE dan Mysql.

Saya dapat memasukkan data ke dalam database tanpa masalah tetapi ketika saya mengambilnya untuk beberapa alasan jsp tidak melakukan hal itu dengan benar sehingga saya selalu mendapatkan drop down kosong. Ini adalah tabel yang saya gunakan:

    category_id int auto_increment,
    name varchar(30),
        primary key(category_id)
        );

Rhis adalah servlet yang saya gunakan dan metode untuk mengeksekusi kueri. Seperti yang Anda lihat, saya mengembalikan Daftar objek dan kemudian saya menambahkannya sebagai atribut permintaan dalam metode doGet. Jadi saya kira sampai di sini semuanya harus bekerja dengan baik.

public class DropDownServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException {
        try {
            List<Category> categories = retrieveCategories();
            request.setAttribute("categories", categories);
            RequestDispatcher view = request.getRequestDispatcher("viewdropdown.jsp");
            view.forward(request, response);
        } catch (ClassNotFoundException | SQLException | IOException ex) {
            ex.printStackTrace();
        }
    }

    public static List<Category> retrieveCategories() throws ClassNotFoundException, SQLException {
        Connection conn = DatabaseConnection.initializeConnection();
        String query = "Select * from category";
        PreparedStatement pstmnt = conn.prepareStatement(query);
        List<Category> categories = new ArrayList<>();


        ResultSet rs = pstmnt.executeQuery();

        while (rs.next()) {

            int id = rs.getInt("category_id");
            String name = rs.getString("name");

            Category cat = new Category(id,name);
            categories.add(cat);

        }

        conn.close();
        return categories;
    }

Dan ini jsp dengan dropdown yang tidak menampilkan data yang seharusnya.

<html>

<head>
    <title>Dropdown page</title>
</head>

<body>
<h1>The names of the categories are the following:</h1>

<select id ="dropdown">
    <c:forEach items="${categories}" var="category">
        <option value = "${category.name}">${category.name}</option>
    </c:forEach>
</select>
    <br>
    <br>

</body>
</html>

EDIT: Jadi saya telah membuat metode pengujian hardcoded ini untuk menguji kode saya dan saya menambahkannya sebagai parameter permintaan yang identik dengan bagaimana saya menambahkan metode lain dengan kueri DB. DropDown saya masih kosong, jadi masalahnya bisa dari cara saya mencoba untuk menampilkan item di jsp.Saya pikir itu bisa di loop yang saya miliki.

public static List<Category> testMethod(){
        List<Category> list = new ArrayList<>();
        Category one = new Category(1,"Blue");
        Category two = new Category(2,"Red");
        list.add(one);
        list.add(two);

        return list;

    }
0
helloApp 10 Maret 2020, 13:29

1 menjawab

Jawaban Terbaik

Sepertinya ${categories} adalah koleksi kosong.

Pertama, pastikan, Anda telah mengimpor perpustakaan JSTL Core ke halaman JSP Anda. Hal ini dilakukan dengan menempatkan

<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>

Di bagian atas halaman JSP.

Selain itu, Anda dapat memeriksa di sisi JSP jika koleksinya kosong dengan menambahkan di suatu tempat:

<c:out value="${categories.size()}" />.

Selain itu, Anda menggunakan Bahasa Ekspresi langsung di antara tag HTML <option>, jadi Anda juga perlu menambahkan:

<%@ page isELIgnored = "false" %>

Di bagian atas halaman JSP agar dapat dievaluasi ke nilai yang sesuai, alih-alih merender teks biasa.

1
ptr92zet 10 Maret 2020, 10:49