繁体   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