mys JSP中迭代器的错误

时间:2010-03-22 09:35:48

标签: java jsp struts

TITLLE                                              [...]                          
<logic:iterate id="listClient" name="Client">
 <table>
  <tr>
   <td>
    [...]
   </td>
  </tr>
 </table>
</logic:iterate>

但是我的第二次迭代出现了这个错误

  

javax.servlet.jsp.JspException:不能   为此集合创建迭代器

3 个答案:

答案 0 :(得分:4)

当迭代标记无法为您传递给它的集合创建迭代器时,会抛出Cannot create iterator for this collection消息。

标记使用指定的名称从作用域中提取对象,在本例中为Client并开始检查它的类型:

  • 对象或基元的数组;
  • java.util.Collection中;
  • java.util.Iterator的;
  • java.util.Map;
  • 的java.util.Enumeration。

如果找到其中一个对象类型,则以适当的方式提取迭代器。如果以上都不匹配,则会获得javax.servlet.jsp.JspException: Cannot create iterator for this collection

此时我同意Adeel Ansari的评论:“当你能够迭代一次,但不会再次”时,对我来说没有任何意义。“

你是否正在对两个迭代器标记之间的Client bean做一些事情(即所呈现的代码是否与迭代器标记有关)?也许你用不是集合的东西覆盖它?

答案 1 :(得分:1)

您正在使用相同的id,更改第二个的ID

答案 2 :(得分:0)

使用这种类型的迭代器来解决这个问题.............

<tr>
    <td><b>RECD from :</b>&nbsp;&nbsp;&nbsp;&nbsp;
        <select name="vo.cuttingRecivedFrom" >
            <option value="">select</option>
            <logic:notEmpty name="storeList">
                <logic:iterate name="storeList" id="storeList1" indexId="count">
                    <option value="<bean:write name="storeList1" property="storeName"/>"><bean:write name="storeList1" property="storeName"/></option>
                </logic:iterate>
            </logic:notEmpty>
        </select>
    </td>
    <td><b>RECD in :</b>&nbsp;&nbsp;&nbsp;&nbsp;
        <select name="vo.cuttingRecivedFrom" >
            <option value="">select</option>
            <logic:notEmpty name="storeList">
                <logic:iterate name="storeList" id="storeList1" indexId="count1">
                    <option value="<bean:write name="storeList1" property="storeName"/>"><bean:write name="storeList1" property="storeName"/></option>
                </logic:iterate>
            </logic:notEmpty>
        </select>
    </td>
</tr>