簡體   English   中英

將ResultSet從servlet傳遞給JSP

[英]pass ResultSet from servlet to JSP

我在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總是為空。

我究竟做錯了什么?

您也不應該在JSP中使用ResultSet。 這是一個數據庫游標,一種稀缺資源。 你可以在一個簡單的頁面上“工作”,但我敢打賭你沒有明確的責任在代碼中關閉ResultSet,Statement或Connection。 你很快就會用完,並想知道為什么你的代碼會因異常而崩潰。

java.sql接口實現都不應該從明確定義的持久層中逃脫。 獲取連接,獲取ResultSet,將其映射到對象或數據結構中,然后按照獲取的相反順序關閉所有資源,然后將對象或數據結構返回到JSP,僅使用JSTL寫入,不使用scriplet進行顯示。 這是正確的做法。

如果必須在JSP中使用SQL,請使用JSTL <sql>標記來執行此操作。

鑒於你的if語句,我不明白行是如何為null

無論如何,它不應該是DisplayProperties.jsp中的request.getAttribute("propertyList")嗎?

你已經回答,所以我只打算做一個增強的建議:在JSP中使用小腳本。 在適當的地方使用taglib和EL。 生成列表的示例如下:

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

您可以對HTML table和下拉option執行相同的操作。 希望這可以幫助。

采用

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

代替

request.setAttribute("propertyList", Rows);

在您的servlet代碼中。 它會很完美。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM