版權聲明:本文爲 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址:https://blog.csdn.net/sun8112133/article/details/104614146
文章目錄
在 Spring MVC 中我們可以使用一組 Spring 已經封裝好的表單標籤庫來提高我們的開發效率,通過這些標籤我們可以訪問到 ModelMap 中的內容。
ModelMap 是 ModelAndView 的底層實現,之前我們在業務方法中將對象保存到了 ModelAndView 中,其實底層是將對象保存到了 ModelMap 中。
一、導入 Spring MVC 表單標籤庫
Spring MVC 的表單標籤庫的語法和 JSTL 標籤庫的語法非常相似,我們需要先在 JSP 頁面中導入 Spring MVC 表單標籤庫:
<!-- 前綴 prefix 可以自定義,通常爲 from -->
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form" %>
二、表單標籤庫的基本使用
1、業務數據綁定
和之前一樣,向 ModelAndView 中存中值。
@GetMapping("/get")
public ModelAndView get() {
Person person = new Person();
person.setId(1);
person.setName("張三");
person.setAge(22);
person.setGender("男");
ModelAndView modelAndView = new ModelAndView("show", "person", person);
return modelAndView;
}
2、在表單上將業務數據取出
業務數據進行綁定後,直接通過 Spring MVC 提供的表單標籤庫將業務數據的值取出即可。其中
modelAttribute
的屬性值是存入 ModelAndView 的 key 值,path
屬性值是存入 ModelAndView 中對象的屬性值。
<form:form modelAttribute="person">
用戶編號:<form:input path="id"/>
用戶姓名:<form:input path="name"/>
用戶年齡:<form:input path="age"/>
用戶性別:<form:input path="gender"/>
</form:form>
三、表單標籤庫的常用標籤
1、form 標籤
<form:form modelAttribute="person" method="post"></form:form>
相當於是 HTML 中的
<form></form>
元素,通過modelAttribute
屬性完成綁定的具體業務數據。
2、input 標籤
<form:input path="name" />
相當於是 HTML 中的
<input type="text" />
元素,form
標籤綁定的是業務數據,input
標籤綁定的是業務數據中的屬性值,通過path
與業務數據的屬性名對應,並支持級聯屬性。
用戶性別:<form:input path="gender" />
3、password 標籤
<form:password path="password" />
相當於是 HTML 中的
<input type="password" />
元素,通過path
屬性與業務數據的屬性名對應,password
標籤的值不會在頁面顯示。
用戶密碼:<form:password path="password" />
4、checkbox 標籤
<form:checkbox path="hobby" value="讀書" />讀書
相當於是 HTML 中的
<input type="checkbox" />
元素,通過path
屬性與業務數據的屬性名對應,可以綁定 布爾 、數組 和 集合。如果綁定的是 布爾 類型的變量,該變量的值爲
true
,則表示選中,false
表示不選中;如果綁定的是 數組 或者 集合 類型的變量,數組/集合中的元素等於
checkbox
的value
值,則該項選中,否則不選中。
用戶愛好:
<form:checkbox path="hobby" value="Java" />Java
<form:checkbox path="hobby" value="PHP" />PHP
<form:checkbox path="hobby" value="C++" />C++<br>
5、checkboxes 標籤
checkboxes 標籤 是
<form:checkbox></form:checkbox>
標籤的升級版。它相當於是 HTML 中的一組
<input type="checkbox" />
元素,這裏需要結合items
和path
兩個屬性來使用。
items
屬性是被遍歷的集合或數組的 EL 表達式,path
屬性是被選中的集合或數組,可以這樣理解,items
爲全部類型,path
爲默認選中的類型。
用戶愛好1:<form:checkboxes items="${person.hobbys1}" path="selectHobbys1" /><br>
用戶愛好2:<form:checkboxes items="${person.hobbys2}" path="selectHobbys2" />
6、radiobutton 標籤
<form:radiobutton path="gender" value="0" />
相當於是 HTML 中的一個
<input type="radio" />
元素,綁定的數據與標籤的value
值相等爲選中狀態,否則爲不選中狀態。
用戶性別:
<form:radiobutton path="gender" value="男" />男
<form:radiobutton path="gender" value="女" />女
7、radiobuttons 標籤
<form:radiobuttons items="${person.gender}" path="selectGender" />
相當於是 HTML 中的一組
<input type="radio" />
元素,這裏需要結合items
和path
兩個屬性來使用。
items
屬性是被遍歷的集合或數組,path
屬性是被選中的值,可以這樣理解,items
爲全部類型,path
爲默認選中的類型,用法與<form:checkboxes>
一致。
8、select 標籤
<form:select items="${person.citys}" path="selectCity" />
相當於是 HTML 中的一個
<select />
,這裏需要結合items
和path
兩個屬性來使用。
items
屬性是被遍歷的集合或數組,path
屬性是被選中的值,用法與<form:radiobuttons />
一致。
9、option 標籤
<form:select>
結合<form:option>
使用,<form:select>
定義path
屬性,給每一個<form:options>
設置value
屬性,path
與哪個value
相等,該項默認選中。
城市:
<form:select path="city">
<form:option value="太原" />
<form:option value="廣州" />
<form:option value="北京" />
<form:option value="上海" />
</form:select>
10、options 標籤
<form:options>
標籤要結合<form:select>
元素來使用,<form:select>
只定義了path
屬性,在<form:select>
標籤內部會添加一個子標籤<form:options>
,設置items
屬性,獲取被遍歷的集合。
城市:
<form:select path="city">
<form:options items="${person.citys }" />
</form:select>
11、textarea 標籤
相當於是 HTML 中的一個
<textarea />
元素,path
屬性是業務數據的屬性值,作爲文本輸入域的默認值。
info: <form:textarea path="info" />
12、errors 標籤
該標籤是顯示錯誤信息標籤,使用它得需要結合 Spring MVC 的 Validator 驗證器,它會將驗證結果的 error 信息渲染到 JSP 頁面中。
1)創建驗證器,實現 Validator 接口。
import org.springframework.validation.Validator;
public class StudentValidator implements Validator {
@Override
// 它支持哪種類型的驗證
public boolean supports(Class<?> clazz) {
return Student.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
ValidationUtils.rejectIfEmpty(errors, "name", null, "姓名不能爲空");
ValidationUtils.rejectIfEmpty(errors, "age", null, "年齡不能爲空");
}
}
2)Spring MVC 配置管理文件
注入自定義驗證器,並開啓它。
<bean class="com.demo.validator.StudentValidator" id="studentValidator"></bean>
<!-- 啓用驗證器(一定要放到最後) -->
<mvc:annotation-driven validator="studentValidator"></mvc:annotation-driven>
3)控制器
創建業務方法,第一個
login
方法用來生成業務數據,跳轉到login.jsp
,第二個login
方法用來做驗證。
@Controller
public class LoginController {
@GetMapping("/login")
public ModelAndView login() {
ModelAndView modelAndView = new ModelAndView("login", "student", new Student());
return modelAndView;
}
@PostMapping("/login")
//BindingResult 就是驗證的結果
public String reg(@Validated Student student, BindingResult bindingResult) {
System.out.println(student);
System.out.println(bindingResult.hasErrors());
if (bindingResult.hasErrors()) {
return "login";
}
return "index";
}
}
4)JSP
<form:form action="login" method="post" modelAttribute="student">
<form:input path="name" /><form:errors path="name" /><br>
<form:input path="age" /><form:errors path="age" /><br>
<input type="submit">
</form:form>