3

I am doing the following in my 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);

and then in my jsp DisplayPropeties.jsp I have

<% 
     ArrayList rows = new ArrayList();

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

ただしrows、常に null です。

私は何を間違っていますか?

4

4 に答える 4

7

また、JSP で ResultSet を使用しないでください。これはデータベース カーソルであり、希少なリソースです。単純なページでこれを「機能させる」ことができるかもしれませんが、コード内の ResultSet、Statement、または Connection を閉じる明確な責任はないと思います。すぐに不足して、なぜコードが例外でクラッシュするのか不思議に思うでしょう。

java.sql インターフェースの実装はどれも、明確に定義された永続層から抜け出すべきではありません。接続を取得し、ResultSet を取得し、それをオブジェクトまたはデータ構造にマップし、取得と逆の順序ですべてのリソースを閉じてから、オブジェクトまたはデータ構造を JSP に戻し、JSTL のみでスクリプトレットを使用せずに記述して表示します。それは正しいことです。

JSP で SQL を使用する必要がある場合は、JSTL の <sql> タグを使用してください。

于 2009-11-13T00:22:38.127 に答える
5

null行にあなたのifステートメントを与える方法がわかりません。

とにかく、それはあるべきではありませんrequest.getAttribute("propertyList")DisplayProperties.jsp

于 2009-11-12T23:10:46.923 に答える
3

使用する

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

それ以外の

request.setAttribute("propertyList", Rows);

サーブレットコードで。それは完璧に動作します。

于 2011-07-12T11:17:42.097 に答える
3

答えはわかったので、機能強化の提案のみを行います。JSP でスクリプトレットを使用しないでください。必要に応じて taglibs と EL を使用します。リストを生成する例は次のとおりです。

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

HTMLtableとドロップダウンについても同じことができますoption。お役に立てれば。

于 2009-11-12T23:34:59.530 に答える