【发布时间】:2014-06-03 17:55:06
【问题描述】:
我有一个从数据库返回的 Collection 对象。我想看看大小是 0 还是 >0 并相应地引导我的前进。
为此,我使用了迭代器和hasNext(),如下所示,
if (!report.getFtRecords().iterator().hasNext())
{
NoRecord = true;
}
if (NoRecord)
forwardName = "successNoRecord"; // retains in the same page
else
forwardName = "success"; //goes to 2nd page page
在 JSP 中,我使用相同的报表对象,而在 scriptlet 中,它们正在执行 iterator.hasNext()。这适用于从 DB 返回的“0”记录和从 DB 返回的多于 1 条记录。但是,如果只有一条记录,我使用相同的报告对象,并且由于我在操作类中执行 hasNext() 并在 JSP 中执行相同操作,因此光标移出第一条记录并且在 JSP 中不显示任何内容(因为结果集有 1记录)。由于它是一个迭代器,我无法重置集合。因为我的类扩展了抽象集合,所以我也无法获得集合的 size(),所以任何调用 .size() 的东西都会引发异常。我该如何处理。我试图通过发送带有计数的最后一列来处理数据库,但最终会遇到同样的问题。有什么建议吗?
【问题讨论】:
-
为什么不直接检查集合对象的大小。
-
正如我提到的,我的集合扩展了 AbstractCollection 并且大小被覆盖如下:public int size() { throw new UnsupportedOperationException(); //没有办法知道 }
-
使用
for-each循环并在循环中将其设置为NoRecord=false并打破它。现在基于NoRecord值在循环后重定向它。 -
我不明白为什么 hasNext() 应该将您移动到集合中的下一个项目。您应该可以多次调用 hasNext(),它是 next() 移动迭代器。
-
@Braj...for-each 仍然循环大小并引发异常。 @Si Kelly 确实如此,但没有显示任何记录。如果我删除动作类中的 hasNext(),它将在 JSP 中显示单个记录
标签: java jsp collections struts