springMVC对简单对象、Set、List、Map的数据绑定和常见问题(二)

6、List绑定

List需要绑定在对象上,而不能直接写在Controller方法的参数中。

 

  1. public class User  
  2.   
  3.     private String firstName;  
  4.   
  5.     private String lastName;  
  6.   
  7.     。。。  
  8.   
  9.  
  10.   
  11.        public class UserListForm  
  12.   
  13.     private List users;  
  14.   
  15.     。。。  
  16.   
  17. }  
  1. @RequestMapping("test.do" 
  2. public void test(UserListForm userForm)  
  3.     for (User user userForm.getUsers())  
  4.         System.out.println(user.getFirstName() " user.getLastName());  
  5.      
  6. }  
  1. <</span>form action="test.do" method="post">  
  2.    <</span>table>  
  3.       <</span>thead>  
  4.          <</span>tr>  
  5.             <</span>th>First Name</</span>th>  
  6.             <</span>th>Last Name</</span>th>  
  7.          </</span>tr>  
  8.       </</span>thead>  
  9.       <</span>tfoot>  
  10.          <</span>tr>  
  11.             <</span>td colspan="2"><</span>input type="submit" value="Save" /></</span>td>  
  12.          </</span>tr>  
  13.       </</span>tfoot>  
  14.       <</span>tbody>  
  15.          <</span>tr>  
  16.             <</span>td><</span>input name="users[0].firstName" value="aaa" /></</span>td>  
  17.             <</span>td><</span>input name="users[0].lastName" value="bbb" /></</span>td>  
  18.          </</span>tr>  
  19.          <</span>tr>  
  20.             <</span>td><</span>input name="users[1].firstName" value="ccc" /></</span>td>  
  21.             <</span>td><</span>input name="users[1].lastName" value="ddd" /></</span>td>  
  22.          </</span>tr>  
  23.          <</span>tr>  
  24.             <</span>td><</span>input name="users[2].firstName" value="eee" /></</span>td>  
  25.             <</span>td><</span>input name="users[2].lastName" value="fff" /></</span>td>  
  26.          </</span>tr>  
  27.       </</span>tbody>  
  28.    </</span>table>  
  29. </</span>form>  
其实,这和第4点User对象中的contantInfo数据的绑定有点类似,但是这里的UserListForm对象里面的属性被定义成List,而不是普通自定义对象。所以,在JSP中需要指定List的下标。值得一提的是,Spring会创建一个以最大下标值为size的List对象,所以,如果JSP表单中有动态添加行、删除行的情况,就需要特别注意,譬如一个表格,用户在使用过程中经过多次删除行、增加行的操作之后,下标值就会与实际大小不一致,这时候,List中的对象,只有在jsp表单中对应有下标的那些才会有值,否则会为null,看个例子:
  1. <</span>form action="test.do" method="post">  
  2.    <</span>table>  
  3.       <</span>thead>  
  4.          <</span>tr>  
  5.             <</span>th>First Name</</span>th>  
  6.             <</span>th>Last Name</</span>th>  
  7.          </</span>tr>  
  8.       </</span>thead>  
  9.       <</span>tfoot>  
  10.          <</span>tr>  
  11.             <</span>td colspan="2"><</span>input type="submit" value="Save" /></</span>td>  
  12.          </</span>tr>  
  13.       </</span>tfoot>  
  14.       <</span>tbody>  
  15.          <</span>tr>  
  16.             <</span>td><</span>input name="users[0].firstName" value="aaa" /></</span>td>  
  17.             <</span>td><</span>input name="users[0].lastName" value="bbb" /></</span>td>  
  18.          </</span>tr>  
  19.          <</span>tr>  
  20.             <</span>td><</span>input name="users[1].firstName" value="ccc" /></</span>td>  
  21.             <</span>td><</span>input name="users[1].lastName" value="ddd" /></</span>td>  
  22.          </</span>tr>  
  23.          <</span>tr>  
  24.             <</span>td><</span>input name="users[20].firstName" value="eee" /></</span>td>  
  25.             <</span>td><</span>input name="users[20].lastName" value="fff" /></</span>td>  
  26.          </</span>tr>  
  27.       </</span>tbody>  
  28.    </</span>table>  
  29. </</span>form>  
这个时候,Controller中的userForm.getUsers()获取到List的size为21,而且这21个User对象都不会为null,但是,第2到第19的User对象中的firstName和lastName都为null。打印结果:

 

 

  1. aaa bbb  
  2. ccc ddd  
  3. null null  
  4. null null  
  5. null null  
  6. null null  
  7. null null  
  8. null null  
  9. null null  
  10. null null  
  11. null null  
  12. null null  
  13. null null  
  14. null null  
  15. null null  
  16. null null  
  17. null null  
  18. null null  
  19. null null  
  20. null null  
  21. eee fff  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值