1.1:form:form標籤
Handler
@Controller
@RequestMapping("/tags")
public class TagHandler {
@GetMapping("/get")
public String get(Model model){
Student student = new Student(1,"tom",22);
model.addAttribute("student",student);
return "tag";
}
}
傳統form寫法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="" method="">
學生ID:<input type="text" name="id" value="${student.id}">
學生姓名:<input type="text" name="name" value="${student.name}">
學生年齡:<input type="text" name="age" value="${student.age}">
</form>
</body>
</html>
使用spring mvc的表單標籤的寫法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form:form modelAttribute="student">
學生ID:<form:input path="id"/>
學生姓名:<form:input path="name"/>
學生年齡:<form:input path="age"/>
學生城市:<form:input path="address.city"/> <%--支持級聯--%>
</form:form>
</body>
</html>
注:path屬性支持級聯!!
最終渲染在頁面上
<form id="student" action="/tags/get" method="post">
學生ID:<input id="id" name="id" type="text" value="1">
學生姓名:<input id="name" name="name" type="text" value="wzj">
學生年齡:<input id="age" name="age" type="text" value="22">
學生城市:<input id="address.city" name="address.city" type="text" value="深圳">
</form>
form標籤的id,就是request域對象中的key值!
form:input標籤:變成了類型!
1、JSP 頁面導入 Spring MVC 表單標籤庫,與導入 JSTL 標籤庫的語法非常相似,前綴 prefix 可以自定義,通常定義爲 from。
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
2、將 form 表單與模型數據進行綁定,通過 modelAttribute 屬性完成綁定,將 modelAttribute 的值設置爲模型數據對應的 key 值。
Handeler:modelAndView.addObject("student",student);
JSP:<form:form modelAttribute="student">
3、form 表單完成綁定之後,將模型數據的值取出綁定到不同的標籤中,通過設置標籤的 path 屬性完成,將 path 屬性的值設置爲模型數據對應的屬性名即可。
學生ID:<form:input path="id"/><br/>
學生姓名:<form:input path="name"/><br/>
學生年齡:<form:input path="age"/><br/>
1.2:form:password標籤
<form:form modelAttribute="student">
學生密碼:<form:password path="password"/><br/>
</form:form>
注意:它這個密碼不會顯示任何內容,連黑點都沒有,我感覺不是很好!
渲染在html中
學生密碼:<input id="password" name="password" type="password" value="">
1.3:form:checkbox標籤
通過 path 與模型數據的屬性值進行綁定,可以綁定 boolean、數組和集合。
如果綁定 boolean 值,若該變量的值爲 true,則表示該複選框選中,否則表示不選中。
如果綁定數組或者集合,數組/集合中的元素等於 checkbox 的 value 值,則選中。
- 綁定boolean值
多選框:<form:checkbox path="flag"/><br/>
渲染在html中
多選框:<input id="flag1" name="flag" type="checkbox" value="true" checked="checked">
- 綁定數組/集合
1、Handler
@GetMapping("/get")
public String get(Model model){
Student student = new Student();
student.setHobby(new String[]{"打籃球","編程","跑步","唱歌"});
model.addAttribute("student",student);
return "tag";
}
2、頁面
<form:form modelAttribute="student">
愛好:
<form:checkbox path="hobby" value="打籃球"></form:checkbox>打籃球<br/>
<form:checkbox path="hobby" value="編程"/>編程<br/>
<form:checkbox path="hobby" value="旅遊"/>旅遊<br/>
<form:checkbox path="hobby" value="逛街"/>逛街<br/>
</form:form>
最終頁面上的打籃球,編程,被選中!
1.4:form:checkboxes標籤
渲染的是 HTML 中的一組
<input type="checkbox"/>
,是對<form:checkbox/>
的一種簡化,需要結合 items 和 path 屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的集合或數組,可以這樣理解,items 爲全部可選集合,path 爲默認的選中集合。
<form:form modelAttribute="student">
愛好:
<form:checkboxes path="selectedHobby" items="${student.hobby}"/>
</form:form>
同樣最終頁面上的打籃球,編程,被選中!
注意:items 則需要通過 EL 表達式的形式從域對象中獲取數據,不能直接寫屬性名。
1.5:form:radiobutton 和 form:radiobuttons標籤
和form:check 和 form:checkboxes基本上一致!
渲染的是 HTML 中的一組
<input type="radio"/>
,這裏需要結合 items 和 path 兩個屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的值,items 爲全部的可選類型,path 爲默認選中的選項
- form:radiobutton
1、handler
student.setRadioId("1");
2、頁面
單選框:<form:radiobutton path="radioId" value="0"/>
綁定的數據與標籤的 value 值相等則爲選中,否則不選中。
- form:radiobuttons
1、handler
student.setRadioGroup(Arrays.asList("男","女"));
student.setSelectedRadio(Arrays.asList("男"));
2、頁面
單選框組:<form:radiobuttons path="selectedRadio" items="${student.radioGroup}"/>
path:對應modelAttribute域中的對象的屬性即可 !
1.6:form:select標籤
渲染的是 HTML 中的一個 <select/>
標籤,需要結合 items 和 path 兩個屬性來使用,items 綁定被遍歷的集合或數組,path 綁定被選中的值,用法與 <from:radiobuttons/>
一致。
HashMap cityMap = new HashMap();
cityMap.put(1,"深圳");
cityMap.put(2,"上海");
student.setCityMap(cityMap);
student.setSelectCity(1);
所在城市:<form:select path="selectCity" items="${student.cityMap}"></form:select>
在html中渲染
<select id="selectCity" name="selectCity">
<option value="1" selected="selected">深圳</option>
<option value="2">上海</option>
</select>
將map的key,變成了頁面上的value, vlaue變成了要顯示的文字!
1.6.1:form:options標籤
下拉框:
<form:select path="selectCity">
<form:options items="${student.cityMap}"/>
</form:select>
效果和上面是一樣的,但是path和items的位置不一樣了!
1.6.2:form:option標籤
form:select
結合
form:option的使用,
from:select定義 path 屬性,給每一個
form:option` 設置 value 值,path 的值與哪個 value 值相等,該項默認選中。
所在城市:<form:select path="selectCity">
<form:option value="1">杭州</form:option>
<form:option value="2">成都</form:option>
<form:option value="3">西安</form:option>
</form:select><br/>
1.7:form:textarea標籤
渲染的是 HTML 中的一個
<textarea/>
,path 綁定模型數據的屬性值,作爲文本輸入域的默認值。
student.setIntroduce("你好,我是...");
modelAndView.addObject("student",student);
信息:<form:textarea path="introduce"/><br/>
1.8:form:errors標籤
處理錯誤信息,一般用在數據校驗,該標籤需要結合 Spring MVC 的驗證器結合起來使用。
注:用到的實體類和Handler
1、實體類
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Student {
private Integer id;
private String name;
private Integer age;
private boolean flag;
private String password;
private Address address;
// private String[] hobby;
private List<String> hobby;
private List<String> selectedHobby;
private String radioId;
private List<String> radioGroup;
private List<String> selectedRadio;
private Map<Integer,String> cityMap;
private Integer selectCity;
public Student(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Address {
private String city;
}
2、Handler
@GetMapping("/get")
public String get(Model model){
Student student = new Student();
student.setId(1);
student.setName("wzj");
student.setAge(22);
student.setPassword("12345");
student.setFlag(true);
student.setAddress(new Address("深圳"));
// student.setHobby(new String[]{"打籃球","編程","跑步","唱歌"});
student.setHobby(Arrays.asList("打籃球","編程","跑步","唱歌"));
student.setSelectedHobby(Arrays.asList("打籃球","編程"));
student.setRadioId("1");
student.setRadioGroup(Arrays.asList("男","女"));
student.setSelectedRadio(Arrays.asList("男"));
HashMap cityMap = new HashMap();
cityMap.put(1,"深圳");
cityMap.put(2,"上海");
student.setCityMap(cityMap);
student.setSelectCity(1);
model.addAttribute("student",student);
return "tag";
}