springmvc 练习 校验页面输入数据是否符合规范

坐标 校验 必须的坐标

 <!--导入校验的jsr303规范-->
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>2.0.1.Final</version>
        </dependency>
        <!--导入校验框架实现技术-->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>6.1.0.Final</version>
        </dependency>
    </dependencies>

配置文件 spring 没有

配置文件 springmvc

<?xml version="1.0" encoding="UTF-8" ?>
<beans     xmlns="http://www.springframework.org/schema/beans"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<context:component-scan base-package="com.itheima"/>


    <mvc:annotation-driven/>


</beans>

web.xml

<!--过滤器访问路径过滤-->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
    <param-name>encoding</param-name>
    <param-value>UTF-8</param-value>
</init-param>
</filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/</url-pattern>
    </filter-mapping>

<!--分配器映射路径-->
    <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath*:spring-mvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

页面代码

<html>
<head>
    <title>添加员工-用于演示表单验证</title>
</head>
<body>
    <form action="/addemployee" method="post">
                                                           <%--页面使用${}获取后台传递的校验信息--%>
        员工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>
        员工年龄:<input type="text" name="age"><span style="color:red">${age}</span><br/>
        <%--注意,引用类型的校验未通过信息不是通过对象进行封装的,直接使用对象名.属性名的格式作为整体属性字符串进行保存的,和使用者的属性传递方式有关,不具有通用性,仅适用于本案例--%>
        <%--省:<input type="text" name="address.provinceName"><span style="color:red">${requestScope['address.provinceName']}</span><br/>--%>
        <input type="submit" value="提交">
    </form>
</body>
</html>

<%--本次案例从这个页面发起--%>

controller层

@Controller
public class EmployeeController {

    @RequestMapping(value = "/addemployee")
    public String addEmployee(@Valid Employee employee, Errors errors, Model m){
        //@Valid 用来校验的,加上就启开校验,不用对校验作其他的事
        //Errors对象用来保存所有的问题 现象
       // errors.hasErrors()用来判断该对象检测到页面输入的数据,是否符合规则,没有打印出false
       // System.out.println(errors.hasErrors());
        if (errors.hasErrors()){
            List<FieldError> fieldErrors = errors.getFieldErrors();
            for (FieldError error : fieldErrors) {
                //System.out.println(error.getField());//打印 出的信息   name
                //error.getField() 得到的是 变量名称
                //System.out.println(error.getDefaultMessage());//打印 出的信息  姓名不能为空
                //error.getDefaultMessage() 得到的是 变量注解上定义的 提示信息

                //这说明 errors.getFieldErrors() 是对 该对象的输入信息的校验内容进行监控的
                // Errors 是封装属性 或者是变量 的错误信息


                //Model 对象 用来将数据封装传到页面去的
                //m.addAttribute 需要传递属性名 与属性值  就是对象的验证后出错的 变量名称 与注解上定义的错误提示信息
                //error.getField() 就是对象的验证后出错的 变量名称
                // error.getDefaultMessage() 就是变量注解上定义的错误提示信息
                m.addAttribute(error.getField(),error.getDefaultMessage());

            }
            //验证没有通过 就跳转到输入框的页面
            //发生校验未通过 要在输入框显示提示信息
            //在页面输入框标签 中间 加 ${name} 才能显示输入框显示提示信息
            //举列:输入框标签  员工姓名:<input type="text" name="name"><span style="color:red">${name}</span><br/>

            return "addemployee.jsp";
        }
        return "success.jsp";
    }
}

对象类

public class Employee {
//@NotBlank用来设置校验规则的
    //message 用来在输入框进行提示的
    @NotBlank(message = "姓名不能为空")
    private String name; //员工名字


    private Integer age; //员工年龄

//    private Address address;
//
//    public Address getAddress() {
//        return address;
//    }
//
//    public void setAddress(Address address) {
//        this.address = address;
//    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

普希托夫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值