【SpringMVC筆記整理八】表單標籤庫

版權聲明:本文爲 小異常 原創文章,非商用自由轉載-保持署名-註明出處,謝謝!
本文網址: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 表示不選中;

如果綁定的是 數組 或者 集合 類型的變量,數組/集合中的元素等於 checkboxvalue 值,則該項選中,否則不選中。

用戶愛好:
<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" /> 元素,這裏需要結合 itemspath 兩個屬性來使用。

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" /> 元素,這裏需要結合 itemspath 兩個屬性來使用。

items 屬性是被遍歷的集合或數組,path 屬性是被選中的值,可以這樣理解,items 爲全部類型,path 爲默認選中的類型,用法與 <form:checkboxes> 一致。


8、select 標籤

<form:select items="${person.citys}" path="selectCity" />

相當於是 HTML 中的一個 <select /> ,這裏需要結合 itemspath 兩個屬性來使用。

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>


博客中若有不恰當的地方,請您一定要告訴我。前路崎嶇,望我們可以互相幫助,並肩前行!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章