1.2 input標籤
SpringMVC的input標籤會被渲染爲一個type爲text的普通Html input標籤。使用SpringMVC的input標籤的唯一作用就是它能綁定表單數據。SpringMVC表單標籤最大的好處就是它支持數據綁定,當我們的表單標籤不需要綁定的數據的時候,我們應該使用普通的Html標籤。關於input標籤綁定表單數據的方法已經在介紹form標籤的時候順帶介紹過了,這裏就不再過多的贅述了。
- <form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">
- <table>
- <tr>
- <td>Name:</td><td><form:input path="name"/></td>
- </tr>
- <tr>
- <td>Age:</td><td><form:input path="age"/></td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" value="提交"/></td>
- </tr>
- </table>
- </form:form>
<form:form action="formTag/form.do" method="head" modelAttribute="user" methodParam="requestMethod">
<table>
<tr>
<td>Name:</td><td><form:input path="name"/></td>
</tr>
<tr>
<td>Age:</td><td><form:input path="age"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>
1.3 hidden標籤
hidden標籤會被渲染爲一個type爲hidden的普通Html input標籤。用法跟input標籤一樣,也能綁定表單數據,只是它生成的是一個隱藏域。
1.4 checkbox標籤
checkbox標籤會被渲染爲一個type爲checkbox的普通HTML input標籤。checkbox標籤也是支持綁定數據的。我們知道checkbox就是一個複選框,有選中和不選中兩種狀態,那麼我們在使用checkbox標籤的時候是如何來設定它的狀態的呢?checkbox標籤的選中與否狀態是根據它綁定的值來判斷的。
1.4.1 綁定boolean數據
當checkbox綁定的是一個boolean數據的時候,那麼checkbox的狀態跟該boolean數據的狀態是一樣的,即true對應選中,false對應不選中。
- <form:form action="formTag/form.do" method="post" commandName="user">
- <table>
- <tr>
- <td>Male:</td><td><form:checkbox path="male"/></td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" value="提交"/></td>
- </tr>
- </table>
- </form:form>
<form:form action="formTag/form.do" method="post" commandName="user">
<table>
<tr>
<td>Male:</td><td><form:checkbox path="male"/></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>
看上面這段代碼,這個時候假設我們在渲染該視圖之前往ModelMap中添加了一個user屬性,並且該user對象有一個類型爲boolean的屬性male,那麼這個時候如果male屬性爲true則Male那一欄的複選框將會被選中。
1.4.2 綁定列表數據
這裏的列表數據包括數組、List和Set。下面將以List爲例講一下checkbox是如何根據綁定的列表數據來設定選中狀態的。現在假設有一個類User,其有一個類型爲List的屬性roles,如下所示:
- publicclass User {
- private List<String> roles;
- public List<String> getRoles() {
- return roles;
- }
- publicvoid setRoles(List<String> roles) {
- this.roles = roles;
- }
- }
public class User {
private List<String> roles;
public List<String> getRoles() {
return roles;
}
public void setRoles(List<String> roles) {
this.roles = roles;
}
}
那麼當我們需要展現該User是否擁有某一個Role的時候,我們可以使用checkbox標籤來綁定roles數據進行展現。當checkbox標籤的value在我們綁定的列表數據中存在的時候該checkbox將爲選中狀態。來看下面一段代碼:
- <form:form action="formTag/form.do" method="post" commandName="user">
- <table>
- <tr>
- <td>Roles:</td>
- <td>
- <form:checkbox path="roles" value="role1"/>Role1<br/>
- <form:checkbox path="roles" value="role2"/>Role2<br/>
- <form:checkbox path="roles" value="role3"/>Role3
- </td>
- </tr>
- </table>
- </form:form>
<form:form action="formTag/form.do" method="post" commandName="user">
<table>
<tr>
<td>Roles:</td>
<td>
<form:checkbox path="roles" value="role1"/>Role1<br/>
<form:checkbox path="roles" value="role2"/>Role2<br/>
<form:checkbox path="roles" value="role3"/>Role3
</td>
</tr>
</table>
</form:form>
就上面代碼而言就是當User擁有role1的時候對應的<form:checkbox path="roles" value="role1"/>就會爲選中狀態,也就是說roles列表中包含role1的時候該checkbox就會爲選中狀態。
1.4.3 綁定一個Object數據
checkbox還支持綁定數據類型爲Object的數據,這種情況下Spring會拿所綁定對象數據的toString結果跟當前checkbox的value進行比較,如果能夠進行匹配則該checkbox將爲選中狀態。看這樣一個例子,有一個User類代碼如下:
- publicclass User {
- private Blog blog;
- public Blog getBlog() {
- return blog;
- }
- publicvoid setBlog(Blog blog) {
- this.blog = blog;
- }
- }
public class User {
private Blog blog;
public Blog getBlog() {
return blog;
}
public void setBlog(Blog blog) {
this.blog = blog;
}
}
Blog類的代碼如下:
- publicclass Blog {
- public String toString() {
- return"HelloWorld";
- }
- }
public class Blog {
public String toString() {
return "HelloWorld";
}
}
我們可以看到Blog類的toString方法已經被寫死爲“HelloWorld”了。這個時候假設我們往ModelMap中放了一個user對象,而且給該user對象設定了一個blog屬性,那麼當我們使用該ModelMap對象渲染如下視圖代碼時,checkbox標籤的選中狀態是怎樣的呢?根據前面描述的當checkbox標籤綁定的是一個Object對象的時候我們會拿該Object對象的toString和checkbox的value值進行比較,如果匹配則當前checkbox爲選中狀態,我們知道這裏的checkbox將爲選中狀態。
- <form:form action="formTag/form.do" method="post" commandName="user">
- <table>
- <tr>
- <td>HelloWorld:</td>
- <td>
- <form:checkbox path="blog" value="HelloWorld"/>
- </td>
- </tr>
- <tr>
- <td colspan="2"><input type="submit" value="提交"/></td>
- </tr>
- </table>
- </form:form>
<form:form action="formTag/form.do" method="post" commandName="user">
<table>
<tr>
<td>HelloWorld:</td>
<td>
<form:checkbox path="blog" value="HelloWorld"/>
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="提交"/></td>
</tr>
</table>
</form:form>