【问题标题】:for loop stops outputting after 83 in JSPfor循环在JSP中83之后停止输出
【发布时间】:2013-01-03 22:35:22
【问题描述】:

我正在尝试在 JSP 中输出 ArrayList 的内容。有趣的是,它在索引 83 之后停止输出。ArrayList 的大小是 2000。我偶然发现了这个问题,因为我首先在我的 javascript 函数中尝试了这个:

 document.getElementById('test').innerHTML = '<%
 for(ClassInfo classes: classList)
 {
   out.print(classes.toString());
 }

 %>';

什么都没有。所以我用这样的东西测试了它:

 document.getElementById('test').innerHTML = '<%
 for(int count = 0; count < classList.size(); count++)
 {
   out.print(classList.get(count).toString());
 }

 %>';

还是什么都没有。所以我对其进行了调整,只是想看看我能不能得到任何东西:

document.getElementById('test').innerHTML = '<%
 for(int count = 0; count < 83; count++)
 {
   out.print(classList.get(count).toString());
 }

 %>';

它工作得很好,但在 83 之后就不行了。(即,如果我将其更改为 84,则什么都没有)想了解一下吗?这是我使用 JSP 的第一天,似乎很多人都使用 JSTL 来处理这类事情,据我了解,Tomcat v7 并没有打包。

【问题讨论】:

  • 我会调整一些以确保它不是逻辑问题,只需打印计数并将循环更改为 85。out.print(count);
  • 查看out.print(classList.size()) 打印的内容。
  • @Eng.Fouad 它打印出 2000 年。
  • @J-MANMORGAN:这告诉您 arrayList 中只有 82 个值,其余元素是空字符串(甚至不是 nulls(。只是为了在打印之前证明点,添加可能是 101,102,103 等,你会在 out.print 中看到它们
  • 您究竟是如何观察“它停止输出”的?您是直接查看生成的 HTML 输出(浏览器中的右键单击页面,查看源代码)中的特定 JavaScript 代码,还是根据执行的 JavaScript 代码的预期行为观察到这一点? (因此您以最终用户而不是开发人员的身份观察到)例如,原因可能只是第 84 项的打印值中的单引号(导致 JS 语法错误),因此所有这些项在生成的 HTML 输出。

标签: java html jsp jstl


【解决方案1】:

也许你可以尝试替换

 document.getElementById('test').innerHTML = '<%
 for(ClassInfo classes: classList)
 {
   out.print(classes.toString());
 }
 %>';

document.getElementById('test').innerHTML = '';
<% for (ClassInfo classes : classList)  { %>
document.getElementById('test').innerHTML += '<%= ""+classes %> ';
<% } %>

虽然这非常低效(浏览器中的大量回流,多次查找测试),但它可能有助于调试。我的猜测是(如 cmets 中所述)您的 ArrayList 中的元素为空。在此设置(“”+classes)中,字符串“null”将附加到输出中。

【讨论】:

  • 这是我处理过的最奇怪的事情。当我调试时,它清楚地表明arraylist 中的所有内容都有ClassInfo 值。感谢您的所有建议,我会在找出问题后回复。
  • ClassInfo的toString()方法有没有可能抛出异常?
猜你喜欢
  • 1970-01-01
  • 2012-05-01
  • 2022-01-11
  • 2023-03-28
  • 2013-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多