[英]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.