从索引属性中删除项目 - JavaBeans问题

时间:2010-08-31 16:53:33

标签: java jsp struts javabeans indexed-properties

我正在使用索引属性(使用struts和java / jsp)。我们有一个动态表,可以在表中添加/删除行/项。行的添加按预期工作 - 我在动作类中看到表单中的新行。删除的行(显然)没有设置,但它们也没有从列表中删除。我已经实现了一个void setItem(List),void setItem(index),Item getItem(index)和List getItem()方法。我找不到有关索引属性行为的大量信息。是否有我需要实现的重置方法,或者是应该负责设置新列表的索引属性?据我所知,只有列表中的项目被设置,并且它们是使用void setItem(Item)方法设置的。

1 个答案:

答案 0 :(得分: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