ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【SpringMVC笔记整理八】表单标签库

2020-03-02 16:38:26  阅读:308  来源: 互联网

标签:Spring SpringMVC 标签 表单 ModelAndView path 属性


版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址: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>


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



小异常 发布了179 篇原创文章 · 获赞 174 · 访问量 16万+ 私信 关注

标签:Spring,SpringMVC,标签,表单,ModelAndView,path,属性
来源: https://blog.csdn.net/sun8112133/article/details/104614146

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有