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

发布于 2024-09-16 21:51:56 字数 303 浏览 8 评论 0原文

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

I'm working with indexed properties (using struts and java/jsp). We have a dynamic table that can add/delete rows/items in the table. The adding of rows works as intended - I see the new rows in the form in the action class. The deleted rows do not get set (obviously), but they are also not removed from the list. I have implemented a void setItem(List), void setItem(index), Item getItem(index) and List getItem() methods. I can't find much information regarding the behavior of indexed properties. Is there a reset method that I need to implement, or are indexed properties supposed to take care of setting a new list? From what I can tell, only the items still in the list are set, and they're set using the void setItem(Item) method.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

旧街凉风 2024-09-23 21:51:56
  • 确保您的表单是请求范围,而不是会话范围
  • 使用 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
  • Make sure your form is request scoped, not session scoped
  • Use a LazyList.

For example:

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();
        }
    };

Then you can display/edit the list in your JSP like so:

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

If you want to add elements to the list, make sure you set an index superior than the maximum one. For example if my list contains 3 elements, the new one (the fourth) will look like this: (remember that list are zero-index based)

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

When the form is submitted, any list element deleted will set a null at the specific index. For example, let's say the user deletes the 2nd elements, I will see on the server:

contactsList.get(1) == null;//remember that list are zero-index based
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文