六、List绑定java
List须要绑定在对象上,而不能直接写在Controller方法的参数中。app
public class User { jsp
private String firstName; post
private String lastName; spa
。。。 code
} orm
public class UserListForm { 对象
private List users; get
。。。 input
}
@RequestMapping("test.do")
public void test(UserListForm userForm) {
for (User user : userForm.getUsers()) {
System.out.println(user.getFirstName() + " - " + user.getLastName());
}
}
<</span>form action="test.do" method="post">
<</span>table>
<</span>thead>
<</span>tr>
<</span>th>First Name</</span>th>
<</span>th>Last Name</</span>th>
</</span>tr>
</</span>thead>
<</span>tfoot>
<</span>tr>
<</span>td colspan="2"><</span>input type="submit" value="Save" /></</span>td>
</</span>tr>
</</span>tfoot>
<</span>tbody>
<</span>tr>
<</span>td><</span>input name="users[0].firstName" value="aaa" /></</span>td>
<</span>td><</span>input name="users[0].lastName" value="bbb" /></</span>td>
</</span>tr>
<</span>tr>
<</span>td><</span>input name="users[1].firstName" value="ccc" /></</span>td>
<</span>td><</span>input name="users[1].lastName" value="ddd" /></</span>td>
</</span>tr>
<</span>tr>
<</span>td><</span>input name="users[2].firstName" value="eee" /></</span>td>
<</span>td><</span>input name="users[2].lastName" value="fff" /></</span>td>
</</span>tr>
</</span>tbody>
</</span>table>
</</span>form>
其实,这和第4点User对象中的contantInfo数据的绑定有点相似,可是这里的UserListForm对象里面的属性被定义成List,而不是普通自定义对象。因此,在JSP中须要指定List的下标。值得一提的是,Spring会建立一个以最大下标值为size的List对象,因此,若是JSP表单中有动态添加行、删除行的状况,就须要特别注意,譬如一个表格,用户在使用过程当中通过屡次删除行、增长行的操做以后,下标值就会与实际大小不一致,这时候,List中的对象,只有在jsp表单中对应有下标的那些才会有值,不然会为null,看个例子:
<</span>form action="test.do" method="post">
<</span>table>
<</span>thead>
<</span>tr>
<</span>th>First Name</</span>th>
<</span>th>Last Name</</span>th>
</</span>tr>
</</span>thead>
<</span>tfoot>
<</span>tr>
<</span>td colspan="2"><</span>input type="submit" value="Save" /></</span>td>
</</span>tr>
</</span>tfoot>
<</span>tbody>
<</span>tr>
<</span>td><</span>input name="users[0].firstName" value="aaa" /></</span>td>
<</span>td><</span>input name="users[0].lastName" value="bbb" /></</span>td>
</</span>tr>
<</span>tr>
<</span>td><</span>input name="users[1].firstName" value="ccc" /></</span>td>
<</span>td><</span>input name="users[1].lastName" value="ddd" /></</span>td>
</</span>tr>
<</span>tr>
<</span>td><</span>input name="users[20].firstName" value="eee" /></</span>td>
<</span>td><</span>input name="users[20].lastName" value="fff" /></</span>td>
</</span>tr>
</</span>tbody>
</</span>table>
</</span>form>
这个时候,Controller中的userForm.getUsers()获取到List的size为21,并且这21个User对象都不会为null,可是,第2到第19的User对象中的firstName和lastName都为null。打印结果:
aaa - bbb
ccc - ddd
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
null - null
eee - fff