【问题标题】:Moving to previous element in the Collection移动到集合中的上一个元素
【发布时间】: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


【解决方案1】:

toArray() 是否也返回 UnsupportedOperationException?

report.getFtRecords().toArray()?

您可以1)使用数组进行迭代,2)检查数组的长度并准确执行。

【讨论】:

  • 对大小的任何操作都会调用被覆盖的方法并抛出异常。
  • 是否包含report.getFtRecords().toArray().length ?
  • toArray().length 内部调用 size() 并抛出相同的异常
  • @JNPW 这没有任何意义; length 是数组对象的字段,不需要调用任何方法来检索其值。除非你说toArray() 需要size()...
  • 我同意。 lenght 是数组上的“公共最终 int 长度”字段。
猜你喜欢
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2013-01-10
  • 1970-01-01
相关资源
最近更新 更多