spring webflow使用新项目提交数组

时间:2015-06-18 08:52:46

标签: java spring spring-webflow spring-webflow-2

我正在尝试使用spring webflow提交包含新项目的数组。对于eaxmple,如果myList的大小为3,然后我添加第4项,则提交失败。

<c:forEach items="${myList}" var="item" varStatus="status">
  <tr>
    <td>
       <input type="number" readonly class="form-control" value="${item.a}" name="myList[${status.index}].a"/>
    </td>
    <td>
      <input type="number" class="form-control" value="${item.b}" name="myList[${status.index}].b"/>
    </td>
    <td class="text-center">
      <i class="fa fa-trash delete" data-link="${flowExecutionUrl}&_eventId=deleteItem&itemId=${item.id}"></i>
    </td>
  </tr>
</c:forEach> 

<tr>
  <td>
    <input type="number" readonly class="form-control" value="1234" name="myList[3].a"/>
  </td>
  <td>
    <input type="number" class="form-control" value="5678" name="myList[3].b"/>
  </td>
  <td class="text-center">
    <i class="fa fa-trash delete"></i>
  </td>
</tr>

那么如何提交这样的表格?

1 个答案:

答案 0 :(得分:1)

因为您提供的数据列表的ArrayList具有预定义的固定大小,并且无法接受新条目。

在尝试向流中的数据绑定器中添加任何新条目之前,需要使用AutoPopulatingList(位于spring-core.jar中)包装ArrayList(或者只是在pojo上使用AutoPopulatingList以避免包装方法)。

样本转换方法:

import org.springframework.util.AutoPopulatingList;

//跳过类定义

        public <T> List<T> wrapListWithAutoPopulatingList(List<T> list, Class<?> pojoClazz)  {

            List<T> apl = new AutoPopulatingList(list, pojoClazz ) ;
            return apl;
        }

Java Doc:

  

简单列表包装类,允许自动元素   根据要求填充。这对数据特别有用   绑定到列表,允许创建元素并添加到   列出&#34;及时&#34;时尚。

     

注意:此类不是线程安全的。要创建线程安全的版本,   使用java.util.Collections.synchronizedList实用程序方法。

     

受Commons Collections的LazyList启发。

,请注意&#39; autoGrowCollectionLimit &#39; initBinder上的属性。默认最大值为256个条目。如果您需要更多(或更少),可以调整此项。见

Can not post form with many (over 256) values