版权声明:本文为 小异常 原创文章,非商用*转载-保持署名-注明出处,谢谢!
本文网址: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>
小异常 发布了179 篇原创文章 · 获赞 174 · 访问量 16万+ 私信 关注