Spring Form的动态列表项索引

时间:2011-05-16 13:50:14

标签: java spring spring-mvc

对于像这样的装饰无序列表:

private List<MyListItem> items = LazyList.decorate(new ArrayList(),
        FactoryUtils.instantiateFactory(MyListItem.class));

是否必须使用索引号命名表单中的属性?如:

<form:input path="items[1]" />
<form:input path="items[2]" />

为什么我不能像PHP那样提供两个括号?

item[]

因为使用DOM动态创建输入列表会成为处理项目删除的问题......

2 个答案:

答案 0 :(得分:1)

就像你问为什么Spring不支持像 item [] 这样的通用模式一样,你也可能会问为什么你的集合没有按照显示的项目的顺序排序。你的表格。请注意:java.util.List 是一个有序集合,因此您必须告诉Spring必须插入列表中的每个项目。

解决方法

1º选项

按如下所示创建AutoPopulatingList

private List<Item> items = new AutoPopulatingList(
    new ElementFactory() {
        public Object createElement(int index) throws ElementInstantiationException {
             /**
               * Any removed item will be handled as null. 
               * So we just remove any nullable item before adding to our List
               * By using the following statement
               */
             items.removeAll(Collections.singletonList(null));

             return new Item();
        }
    });

2º选项

由于Spring是开源的,因此您可以创建自定义BeanWrapperImpl。在幕后,BeanWrapperImpl负责填充您的bean。接下来,编译您的自定义Spring MVC

答案 1 :(得分:-1)

您可以访问以下变量:

<form:input path="${item[0]}" />
<form:input path="${item[1]}" />

另一种方式是:

<c:forEach items="${items}" var="item">
    <form:input path="${item}" />
</c:forEach>