2010-08-31 89 views
1

我正在使用索引屬性(使用struts和java/jsp)。我們有一個動態表,可以添加/刪除表中的行/項目。行的添加按預期工作 - 我在行爲類中看到表單中的新行。刪除的行不會被設置(顯然),但它們也不會從列表中刪除。我已經實現了一個void setItem(List),void setItem(index),Item getItem(index)和List getItem()方法。我無法找到有關索引屬性行爲的很多信息。是否有需要實現的重置方法,或者是否需要設置新列表的索引屬性?根據我所知道的,只有列表中的項目才被設置,並且它們使用void setItem(Item)方法進行設置。從索引屬性中刪除項目 - JavaBeans問題

+0

您能分享一些代碼(您的jsp和您的操作方法刪除)嗎? – CoolBeans 2010-08-31 17:11:58

回答

1
  • 確保您的形式是請求範圍,而不是會話範圍
  • 使用LazyList

例如:

private List<PropertyContact> contactsList = LazyList.decorate(new ArrayList<PropertyContact>(), PropertyContact.PROPERTY_CONTACT_FACTORY); 

public static final Factory PROPERTY_CONTACT_FACTORY = new Factory() { 
     @Override 
     public Object create() { 
      return new PropertyContact(); 
     } 
    }; 

然後你就可以顯示/編輯列表在你的JSP像這樣:如果你想要的元素添加到列表中

<c:forEach items="${profileForm.contactsList}" var="contact" varStatus="contactSta"> 
    <html:hidden styleClass="contact-id" property="contactsList[${contactSta.index}].id"/> 
</c:forEach> 

,請確保您設置一個高於最大值的索引。例如,如果我的列表中包含3個元素,新一(四)看起來像這樣:(記住是基於零索引列表)

<input style="hidden" styleClass="contact-id" property="contactsList[3].id"/> 

當表單提交,刪除任何列表元素將設置在特定索引處爲null。例如,假設用戶刪除第二個元素,我將在服務器上看到:

contactsList.get(1) == null;//remember that list are zero-index based