zoukankan      html  css  js  c++  java
  • Spring MVC之表单标签库和校验注解

    Spring MVC 表单标签库

    • Handler

        1 package com.wiggin.controller;

        2 

        3 import com.wiggin.entity.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="http://www.springframework.org/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="http://www.springframework.org/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----

    爱好:<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 com.wiggin.entity;

        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 com.wiggin.entity.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不验证,反之

       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                 ValidationUtils.rejectIfEmpty(errors,"name",null,"姓名不能为空");

       19                 ValidationUtils.rejectIfEmpty(errors,"password",null,"密码不能为空");

       20         }

       21 

    • 控制器ValidatorHandler

        1 package com.wiggin.controller;

        2 

        3 import com.wiggin.entity.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="http://www.springframework.org/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>

    • Springmvc.xml配置验证器

        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

    • pom.xml

        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>

       11             <version>2.0.1.Final</version>

       12         </dependency>

       13         <dependency>

       14             <groupId>org.jboss.logging</groupId>

       15             <artifactId>jboss-logging</artifactId>

       16             <version>3.3.2.Final</version>

       17         </dependency>

    • 通过注解的方式在实体类中进行验证

        1 package com.wiggin.entity;

        2 

        3 import lombok.Data;

        4 import org.hibernate.validator.constraints.NotEmpty;

        5 

        6 import javax.validation.constraints.Size;

        7 

        8 @Data

        9 public class Person {

       10         @NotEmpty(message = "用户名不能为空")

       11         private String username;

       12         @Size(min = 6,max = 12,message = "密码的长度必须为6-12")

       13         private String password;

       14 }

    • 控制器ValidatorHandler

        1 @GetMapping("/register")

        2 public String register(Model model){

        3         model.addAttribute("person",new Person());

        4         return "register";

        5 }

        6 @PostMapping("/register")

        7 public String register(@Valid Person person,BindingResult bindingResult){

        8         if (bindingResult.hasErrors()){

        9                 return "register";

       10         }

       11         return "login";

       12 }

    • Springmvc.xml配置验证器

        1 <!-- 单独配置annotationJSR303才能生效 -->

        2         <mvc:annotation-driven></mvc:annotation-driven>

    校验注解详解:

    @Null 被注解元素必须为null

    @NotNull 被注解元素不能为null

    @Min(value) 被注解元素必须为数字,其值必须大于等于指定最小值

    @Max(value) 被注解元素必须为数字,其值必须小于等于指定最小值

    @email 被注解元素必须电子邮箱地址

    @Pattern 被注解元素符合正则表达式

    @Length 被注解元素大小必须在指定范围之内

    @NotEmpty 被注解元素非空

       

     

  • 相关阅读:
    利用google kaptcha完成登陆动态验证码
    Linux和Windows环境下安装Nginx
    将图片设定为固定大小
    将xls格式的Excel转换成图片
    将pdf格式的文件转换成图片
    SSH连接工具类
    java判断ip内外网
    jenkins安装与使用
    Eclipse快捷键大全
    serialVersionUID的作用
  • 原文地址:https://www.cnblogs.com/wigginess/p/13447458.html
Copyright © 2011-2022 走看看