【问题标题】:pass ResultSet from servlet to JSP将 ResultSet 从 servlet 传递给 JSP
【发布时间】:2010-12-16 02:40:17
【问题描述】:

我在我的 SampleServlet.java 中执行以下操作

//Fill resultset from db
....
try {
   ArrayList Rows = new ArrayList();

   while (resultSet.next()){
       ArrayList row = new ArrayList();
       for (int i = 1; i <= 7 ; i++){
           row.add(resultSet.getString(i));
       }
       Rows.add(row);
   }

request.setAttribute("propertyList", Rows);
RequestDispatcher requestDispatcher = getServletContext().getRequestDispatcher("/DisplayProperties.jsp");
requestDispatcher.forward(request,response);

然后在我的 jsp DisplayPropeties.jsp 中有

<% 
     ArrayList rows = new ArrayList();

     if (request.getSession().getAttribute("propertyList") != null) {
         rows = (ArrayList ) request.getSession().getAttribute("propertyList");
     }
%>

rows 始终为空。

我做错了什么?

【问题讨论】:

    标签: java jsp servlets jdbc resultset


    【解决方案1】:

    我不明白行怎么可以是 null 给定你的 if 声明。

    反正DisplayProperties.jsp中不应该是request.getAttribute("propertyList")吗?

    【讨论】:

    • 谢谢 Murali... 非常感谢。这就像一种享受!
    【解决方案2】:

    使用

    request.getSession().setAttribute("propertyList", Rows);
    

    而不是

    request.setAttribute("propertyList", Rows);
    

    在您的 servlet 代码中。它会完美运行。

    【讨论】:

      【解决方案3】:

      您也不应该在 JSP 中使用 ResultSet。那是一个数据库游标,一种稀缺资源。您可能会在一个简单的页面上“工作”,但我敢打赌,您没有明确的责任来关闭代码中的 ResultSet、Statement 或 Connection。您很快就会用完并想知道为什么您的代码会因异常而崩溃。

      任何 java.sql 接口实现都不应脱离定义良好的持久层。获取连接,获取ResultSet,映射成对象或数据结构,并按照获取的相反顺序关闭所有资源,然后将对象或数据结构返回给你的JSP,只用JSTL编写,没有scriplets,用于显示。这是正确的做法。

      如果您必须在 JSP 中使用 SQL,请使用 JSTL 标记来执行此操作。

      【讨论】:

      • +1。这就是我希望在类似标题的问题中找到的答案! (所以我不需要自己写来询问 servlet 是否适合 ResultSet :))
      【解决方案4】:

      你有答案,所以我只做一个增强建议:不要不要在 JSP 中使用 scriptlet。在适当的地方使用标记库和 EL。生成列表的示例是:

      <ul>
          <c:forEach items="${propertyList}" var="item">
              <li>${item}</li>
          </c:forEach>
      </ul>
      

      您可以对 HTML tables 和下拉列表 options 执行相同的操作。希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 2015-01-18
        • 2013-02-13
        • 2013-03-22
        • 1970-01-01
        • 2016-04-07
        • 1970-01-01
        • 1970-01-01
        • 2013-09-04
        • 2013-11-14
        相关资源
        最近更新 更多