有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在jsp中使用jstl访问结果集

我是新来的。我已经构建了一个Web应用程序,其中我根据用户输入查询数据库,并将resultset存储为session属性。 现在,当我尝试为每个给定错误使用JSTL标记访问结果集时。我用德比作为我的数据库。 下面是代码片段

<c:forEach var="row" items="${sessionScope.borrow_list.rows}">
        <li>Name : <c:out value="${row.book}" /></li>
        <li>Author : <c:out value="${row.author}" /></li>
</c:forEach>

这是个例外

JspPropertyNotFoundException: /member_home.jsp(20,2) '${sessionScope.borrow_list.rows}' Property 'rows' not found on type org.apache.derby.client.net.NetResultSet42

然而,我确实看到了使用上述代码的示例。 我是否做错了什么,或者我的db(ResultSet)不支持此功能


共 (2) 个答案

  1. # 1 楼答案

    顺便说一下,从您的代码和错误消息来看,您似乎已经从代码的某些地方将borrow_list.rows放入了会话中。但是borrow_list不包含任何名为rows的属性

    希望这会有帮助
    非常感谢

  2. # 2 楼答案

    执行JDBC语句后,将有一个ResultSet。应该处理该结果集,然后关闭ResultSet和语句

    大概是这样的:

    public static class Tb {
        String a;
        int b;
        BigDecimal c;
    }
    
    List<Tb> borrowList = new ArrayList<>();
    
    String sql = "SELECT a, b, c FROM tb WHERE a LIKE ? ORDER BY a"
    try (PreparedStatement stmt = connection.prepareStatement(sql)) {
        stmt.setString(1, searchKey + "%"); // First ?.
        try (ResultSet rs = stmt.executeQuery()) {
             while (rs.next()) {
                 Tb record = new Tb();
                 record.a = rs.getString("a");
                 record.b = rs.getInt("b");
                 record.c = rs.getBigDecimal("c");
                 borrowList.add(record);
             }
        } // Closes rs.
    } // Closes stmt.
    
    request.setAttribute("borrow_list", borrowList);
    getServletContext().getRequestDispatcher("/view.jsp").forward();
    

    在JSP中,您可以正常工作

    可能是在您找到的示例中使用了RowSet。ResultSet类似于迭代器,而JdbcRowSet类似于列表,数据量更大

    属性可以在其他作用域中使用:请求作用域仅用于此单个请求

    将类Tbstatic定义为servlet类的内部类时。这可以防止存在ServletClass。这是结核病