【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>


博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!



【SpringMVC笔记整理八】表单标签库【SpringMVC笔记整理八】表单标签库 小异常 发布了179 篇原创文章 · 获赞 174 · 访问量 16万+ 私信 关注
上一篇:SpringMVC入门程序:helloWorld


下一篇:lintcode 797. 到达一个数字