SpringMVC之表单标签库和校验注解Spring MVC 表单标签库
Handler
1 package ller;
2
3 import ity.Student;
4 import org.springframework.stereotype.Controller;
5 import org.springframework.web.bind.annotation.GetMapping;
6 import org.springframework.web.bind.annotation.RequestMapping;
7 import org.springframework.web.servlet.ModelAndView;
8
9 @Controller
10 @RequestMapping("/tag")
11 public class TagHandler {
12
13 @GetMapping("get")
14 public ModelAndView get(){
15 ModelAndView modelAndView = new ModelAndView("tag");
16 Student student = new Student(1L,"张三",18);
17 modelAndView.addObject("student",student);
18 return modelAndView;
19
20 }
21 }
JSP
1 <%--
2 Created by IntelliJ IDEA.
3 User: Administrator
4 Date: 2020/8/5
5 Time: 19:17
6 To change this template use File | Settings | File Templates.
7 --%>
8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
9 <%@ page isELIgnored="false" %>
10 <%@ taglib prefix="form" uri="/tags/form" %>
11 <html>
12 <head>
13 <title>Title</title>
14 </head>
15 <body>
16 <h1>学⽣信息</h1>
17 <form:form modelAttribute="student">
18 学⽣ID:<form:input path="id"/></br>
19 学⽣姓名:<form:input path="name"/></br>
20 学⽣年龄:<form:input path="age"/></br>
21 <input type="submit" value="提交">
22 </form:form>
23 </body>
24 </html>
1.前缀与定义JSTL标签库相似,前缀可以⾃定义,通常定义为form
<%@ taglib prefix="form" uri="/tags/form" %>
2.将form表三与模型数据进⾏绑定,通过modelAttribute的值设置为模型数据对应的key值
Handler:modelAndView.addObject("student",student);
JSP:<form:form modelAttribute="student">
3.form表单完成绑定后,将模型数据的值定义到各个标签中,通过设置path属性完成,与Handler属性名⼀致。
学⽣ID:<form:input path="id"/></br>
学⽣姓名:<form:input path="name"/></br>
学⽣年龄:<form:input path="age"/></br>
常⽤的表单标签
form
<form:form modelAttribute="student">
渲染的是Html中的<form></form>,通过modelAttribute属性绑定具体的模型数据
Input
<form:input path="id"/></br>
渲染的是Html中的<input type="text"/>。form标签绑定的是模型数据input绑定是模型数据的属性值,通过path映射,⽀持级联。
<form:input path="address.name"/></br>
password
<form:password path="password"/></br>
渲染的是Html中的<input type="password"/>。form标签绑定的是模型数据input绑定是模型数据的属性值,通过path映射,但不会再页⾯显⽰。
checkbox
<form:checkbox path="hobby" value="读书"/></br>
渲染的是Html中的<input type="checkbox"/>。form标签绑定的是模型数据input绑定是模型数据的属性值,通过path映射,可以绑定bool,集合,数组。
如果绑定⼀个bool值,如果给定的属性为True,则checkbox选中。
如果绑定⼀个集合或者数组,如果给定的属性值与value值相等,则checkbox选中。
1 String [] hobby={"读书","看电影","玩游戏"};
2 List<String> hobby = Arrays.asList("读书","看电影","玩游戏");
3 Student student = new Student(1L,"张三",18,true,hobby);
----JSP----
1 爱好:<form:checkbox path="hobby" value="读书"/>
2 <form:checkbox path="hobby" value="看电影"/>
3 <form:checkbox path="hobby" value="玩游戏"/>
4 <form:checkbox path="hobby" value="打篮球"/>
checkboxes
<form:checkboxes items="${student.hobby}" path="selectHobby"/></br>
渲染的是Html中的<input type="checkbox"/>。form标签绑定的是模型数据input绑定是模型数据的属性值,item
绑定的是集合中的数据,path绑定的是被选中的数据
1 List<String> hobby = Arrays.asList("读书","看电影","玩游戏","打篮球","弹吉他");
2 List<String> selecthobby = Arrays.asList("读书","看电影","玩游戏");
3 Student student = new Student(1L,"张三",18,true,hobby,selecthobby);
----JSP----
1 爱好:<form:checkboxes path="selectHobby" items="${student.hobby}"/>
radiobutton 和 radiobuttons
渲染的是Html中的<input type="radiobutton/radiobuttons"/>。⽤法与checkbox⼀致。
select
<form:select items="${student.hobby}" path="selectHobby"/></br>
渲染的是Html中的<input type="select"/>。⽤法与checkbox⼀致,可以单独使⽤,可以与form:options⼀起使⽤。
textarea
渲染的是Html中的<textarea/>,path绑定属性值,作为⽂本输⼊值
1 信息:<form:textarea path="introduce"/></br>
errors
处理错误信息,⼀般在数据校验,该标签⼀般结合Spring MVC的验证器结合起来使⽤。
Spring MVC数据效验
Spring MVC提供了两种校验⽅式:1.基于Vailidator接⼝,2.使⽤Annotation JSR-303标准进⾏校验。
基于Validator接⼝的⽅式需要⾃定义Validator验证器,每⼀条数据的验证规则需要开发者⼿动完成,使⽤AnnotationJSR303标准则不需要⾃定义验证器,通过注解的⽅式直接在实体类中添加每个属性的验证规则,这种⽅式更加⽅便,实际开发中推荐使⽤。、
1.基于Validator接⼝的⽅式
实体类Account
1 package ity;
2
3 import lombok.Data;
4
5 @Data
6 public class Account {
7 private String name;
8 private String password;
9
10 }
⾃定义验证器AccountValidator,实现Validator接⼝
1 package com.wiggin.validator;
2
3 import ity.Account;
4 import org.springframework.validation.Errors;
5 import org.springframework.validation.ValidationUtils;
6 import org.springframework.validation.Validator;
7
8 public class AccountValidator implements Validator {
9 // 验证类,判断是否⽀持,如果返回false不验证,反之springmvc的注解有哪些
10 @Override
11 public boolean supports(Class<?> aClass) {
12 // 判断是否是个类
13 return Account.class.equals(aClass);
14 }
15
16 @Override
17 public void validate(Object o, Errors errors) {
18 jectIfEmpty(errors,"name",null,"姓名不能为空");
19 jectIfEmpty(errors,"password",null,"密码不能为空");
20 }
21
控制器ValidatorHandler
1 package ller;
2
3 import ity.Account;
4 import org.springframework.stereotype.Controller;
5 import org.springframework.ui.Model;
6 import org.springframework.validation.BindingResult;
7 import org.springframework.validation.annotation.Validated;
8 import org.springframework.web.bind.annotation.GetMapping;
9 import org.springframework.web.bind.annotation.PostMapping;
10 import org.springframework.web.bind.annotation.RequestMapping;
11
12 @Controller
13 @RequestMapping("/validator")
14 public class ValidatorHandler {
15
16 @GetMapping("/login")
17 public String login(Model model){
18 model.addAttribute("account",new Account());
19 return "login";
20 }
21
22 @PostMapping("/login")
23 public String login(@Validated Account account, BindingResult bindingResult){
24 if (bindingResult.hasErrors()){
25 return "login";
26 }
27 return "index";
28 }
29
30 }
JSP
1 <%--
2 Created by IntelliJ IDEA.
3 User: Administrator
4 Date: 2020/8/6
5 Time: 15:45
6 To change this template use File | Settings | File Templates.
7 --%>
8 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
9 <%@ page isELIgnored="false" %>
10 <%@ taglib prefix="form" uri="/tags/form" %>
11 <html>
12 <head>
13 <title>Title</title>
14 </head>
15 <body>
16 <form:form modelAttribute="account" action="/validator/login" method="post">
17 姓名:<form:input path="name"/><br/>
18 密码:<form:input path="password"/><br>
19 <input type="submit" value="登录">
20 </form:form>
21 </body>
22 </html>
1 <!-- 基于Validator的配置 -->
2 <bean id="accountValidator" class="com.wiggin.validator.AccountValidator"></bean>
3 <mvc:annotation-driven validator="accountValidator"></mvc:annotation-driven>
2.基于Annotation JSR303接⼝的⽅式
使⽤Annotation JSR303标准进⾏验证,需要导⼊⽀持这种标准的依赖的jar⽂件,我们这⾥使⽤hibermate Validator
1 <!-- JSR303 -->
2 <dependency>
3 <groupId>org.hibernate</groupId>
4 <artifactId>hibernate-validator</artifactId>
5 <version>5.3.6.Final</version>
6 </dependency>
7
8 <dependency>
9 <groupId>javax.validation</groupId>
10 <artifactId>validation-api</artifactId>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论