<listbox id="lb" width="100%" mold="paging" pageSize="10" 
  model="@{allUser}" use="com.zktest.TestListbox"> 
  <listhead> 
    <listheader label="userId" /> 
    <listheader label="userName" /> 
    <listheader label="UserAge" /> 
  </listhead> 
</listbox>
 比如,這個listbox已從table中讀出10條數據,我點一個"Add"按鈕,要在此listbox上增加一行listitem,現在的問題是,新的一行listitem倒是show出來了,但頁面報"Index: 10, Size: 10",后臺報錯信息為: 嚴重的: >>java.lang.IndexOutOfBoundsException: Index: 10, Size: 10 
>>  at java.util.ArrayList.RangeCheck(Unknown Source) 
>>  at java.util.ArrayList.get(Unknown Source) 
>>  at org.zkoss.zul.ListModelList.getElementAt(ListModelList.java:144) 
>>  at org.zkoss.zul.Listbox$Renderer.render(Listbox.java:1444) 
>>  at org.zkoss.zul.Listbox$Renderer.access$800(Listbox.java:1420) 
>>  at org.zkoss.zul.Listbox.renderItems(Listbox.java:1529) 
>>  at org.zkoss.zul.Listbox$ExtraCtrl.renderItems(Listbox.java:1760) 
>>...
 我猜想是listbox在讀出那10條數據時,ListModel的size也是10,所以我新增了一行,大小變成11,就超出了ListModel本身設定的大小了,但ListModel只有getSize()方法,沒有setSize()方法,請問各位高手,您們有什么解決方案么?萬分感激! 

解决方案 »

  1.   

    转到java之web开发版了,希望大家帮忙
      

  2.   

    貌似你增加一个listitem后,试图重新渲染,它内部会维持一个index变量,将index增加1后去model取数据,但由于原来的index已经指向model的最后一个数据,加1后就越界了,我猜的。
      

  3.   

    可不可以给model重新赋值多给他一些数据,或者自定义一个渲染器,在里面判断index是否越界,如果越界就不去model中取值。
      

  4.   


    您好,這個model里的值是從Table中讀出來的結果集,我New出一個新行,是要自己填寫數據然后提交到Table的,所以不能重新賦值,而model也沒有setSize()的方法,只能getSize()
      

  5.   

    你即然是用ListModel, 那就是对ListModel add的一笔Data, 不是自己create的一个Listitem. 
      

  6.   

    因为设置pageSize="10",每页只能显示10条,当然报错了。你可以设置大一些,添加一行不就可以了。