• Springmvc之表单验证


    1、需要的相关jar

      这里采用的是hibernate-validator-5.2.4.Final 和validation-api-1.1.0.Final 两个jar包。Hibernate Validator 是 Bean Validation 的参考实现, Hibernate Validator 提供了 JSR 303 规范中所有内置 constraint 的实现,除此之外还有一些附加的 constraint。使用maven下载代码如下:

     1 <dependency>
     2     <groupId>javax.validation</groupId>
     3     <artifactId>validation-api</artifactId>
     4     <version>1.1.0.Final</version>
     5 </dependency>
     6 <dependency>
     7     <groupId>org.hibernate</groupId>
     8     <artifactId>hibernate-validator</artifactId>
     9     <version>5.2.4.Final</version>
    10 </dependency>
    View Code

    2、文件的配置

    springservlet-config.xml文件配置如下:

     1 <mvc:annotation-driven validator="validator"
     2         conversion-service="conversion-service" />
     3     <bean id="validator"
     4         class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
     5         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
     6         <property name="validationMessageSource" ref="validatemessageSource" />
     7     </bean>
     8     <bean id="conversion-service"
     9         class="org.springframework.format.support.FormattingConversionServiceFactoryBean" />
    10     <bean id="validatemessageSource"
    11         class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    12         <property name="basename" value="classpath:i18n" />
    13         <property name="fileEncodings" value="utf-8" />
    14         <property name="cacheSeconds" value="120" />
    15     </bean>
    View Code

    其中<property name="basename" value="classpath:i18n" />是验证错误后提示的消息所在的文件,需要在classpath路径下添加,也可以自己设置路径。

    3、controller, user和i18n.properties代码

    UserControlelr代码部分代码如下:

     1 package org.springframework.samples.myjpetstores.controller;
     2 
     3 import javax.validation.Valid;
     4 
     5 import org.springframework.samples.myjpetstores.io.User;
     6 import org.springframework.stereotype.Controller;
     7 import org.springframework.ui.ModelMap;
     8 import org.springframework.validation.BindingResult;
     9 import org.springframework.web.bind.annotation.RequestMapping;
    10 
    11 @Controller
    12 public class UserController {
    13     @RequestMapping("/login")
    14     public String userLogin(@Valid User user, BindingResult result, ModelMap model)
    15     {
    16         if(result.hasErrors())
    17         {
    18             return "loginForm";
    19         }
    20         return "index";
    21     }
    22 }
    View Code

    代码中需要注意的是,@Valid是必须的,只有加上@Valid,才会对传过来的参数 User类进行验证,后面必须紧跟着BindingResult result, 其中result是用来存放验证错误信息的,它们之间是不能有任务参数的,是成对出现的,有多少个@Valid,就必须有多少个BindingResult result。

    User类代码

     1 package org.springframework.samples.myjpetstores.io;
     2 
     3 import org.hibernate.validator.constraints.NotEmpty;
     4 
     5 public class User {
     6     @NotEmpty(message="{username.not.empty}")
     7     private String username;
     8     @NotEmpty(message="{password.not.empty}")
     9     private String password;
    10     public String getUsername() {
    11         return username;
    12     }
    13     public void setUsername(String username) {
    14         this.username = username;
    15     }
    16     public String getPassword() {
    17         return password;
    18     }
    19     public void setPassword(String password) {
    20         this.password = password;
    21     }
    22     
    23 }
    View Code

    验证错误后的消息文件:i18n.properties

    1 username.not.empty=username is required.
    2 password.not.empty=password is required.
    View Code

    其中name.not.empty和@NotEmpty(message="{username.not.empty}")的{}里的名字必须一致。

    4、视图界面

    显示错误信息界面:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 
     5 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
     6 
     7 <html>
     8 <head>
     9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 <title>Insert title here</title>
    11 </head>
    12 <body>
    13     <form:form modelAttribute="user" method="post">
    14         <form:errors path="*"></form:errors>
    15         <form:errors path="username"></form:errors>
    16         <br />
    17         <br />
    18     </form:form>
    19 </body>
    20 </html>
    View Code

    其中需要注意的是<form:form modelAttribute="user" method="post">中的modelAttribute="user"和controller文件里的@Valid @ModelAttribute User user的@ModelAttribute一致,假如@ModelAttribute没有设置名字,就默认为user,假如写成@Valid @ModelAttribute("loginUser") User user,则 modelAttribute="loginUser" 否则不能进行数据绑定的。<form:errors path="*"></form:errors>的*表示所有的错误信息。<form:errors path="username"></form:errors>表示验证username的错误信息。

  • 相关阅读:
    C++中几种字符串表示方法
    oracle11g卸载(win10)
    Dbvisualizer 连接oracle数据库
    严重: Exception starting filter struts2 Unable to load configuration.
    eclipse启动Tomcat服务输入http://localhost:8080/报404
    Tomcat内存溢出解决办法
    A Java Runtime Environment(JRE) or Java Development Kit (JDK) must be available in order to run Eclipse.
    Spring容器装配bean的方式
    Spring容器的基本实现
    spring环境搭建
  • 原文地址:https://www.cnblogs.com/Hxinguan/p/6106689.html
Copyright © 2020-2023  润新知