`

java国际化之(四)--- hibernate-validator国际化表单验证

阅读更多

概述

 

上一篇通过Spring MVC+Freemaker整合一个国际化实现demo,同时demo里还整合了Spring MVC自带的bean验证Validator,需要自己去实现验证逻辑。本篇主要内容Spring MVC+hibernate-validator bean实现国际化表单验证,相关代码已上传Githut,地址见文章结尾。

 

hibernate-validator 验证框架整合

 

提到bean验证,不得不说下JSR bean validation规范(JSR303JSR349),这个规范只是定义了对象属性约束说明,没有具体实现。hibernate-validator就是实现了这个规范的框架之一,另外bean validation 1.1JSR349进行了实现,但据说还不够稳定。2016年中bean validation 2.0发布,发布说明:http://beanvalidation.org/news/2016/07/15/bean-validation-2-0-is-coming/。相对而言hibernate-validator更成熟,这里采用hibernate-validator进行demo搭建(版本5.2.4.Final)。

 

采用hibernate-validator验证框架比spring mvc自带的验证框架好用,首先不需要自己实现验证逻辑,hibernate已经帮我们实现了;其次hibernate-validator验证框架可以完全基于注解,使用更加方便灵活。

 

首先看下JSR303约束注解标签,以及基本用法:

 

 

 

按照以上讲解的注解格式,为上一章的User类中需要验证的字段进行相应注解添加(在上一章的代码里进行修改):

/**
 * Created by gantianxing on 2017/6/8.
 */
public class User implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @NotNull
    @Size(min=2,max = 5)
    private String name;//姓名
 
    @NotNull
    @Past
    private Date birthday;//生日
 
    @NotNull
    @Digits(integer=3,fraction=2)
    private BigDecimal money;//资产
 
    @NotNull
    @Pattern(regexp="\\d{11}")
    private String phoneNum;//手机号
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public BigDecimal getMoney() {
        return money;
    }
 
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
 
    public String getPhoneNum() {
        return phoneNum;
    }
 
    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

 

具体注解含义就不解释了,根据上面的规则讲解,一目了然。

启动tomcat,访问http://localhost/add,如下:



 

 

每个字段都不填写值,直接点击添加按钮:



 

 

切换化到英文:


 
 

可以看到验证框架,有一套自己默认的错误提示信息,并且已经支持了国际化(这里我只试了中文和英文)。

 

整合国际化配置文件

 

一般情况下你对默认的错误提示信息会不满意,别紧张,Spring MVC可以很好的把hibernate-validator验证器与国际化配置整合起来。整合分三步:

 

第一步:首先我们要修改User类的注解,把错误消息的key指定为国际化属性配置文件中的key,如下:

public class User implements Serializable {
    private static final long serialVersionUID = 1L;
 
    @NotNull(message="{user.name.null}")
    @Size(min=2,max =5,message = "{user.name.error}")
    private String name;//姓名
 
    @NotNull(message="{user.birthday.null}")
    @Past(message="{user.birthday.error}")
    private Date birthday;//生日
 
    @NotNull(message="{user.money.null}")
    @Digits(integer=3,fraction=2,message="{user.money.error}")
    private BigDecimal money;//资产
 
    @NotNull(message="{user.phoneNum.null}")
    @Pattern(regexp="\\d{11}",message="{user.phoneNum.error}")
    private String phoneNum;//手机号
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Date getBirthday() {
        return birthday;
    }
 
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
 
    public BigDecimal getMoney() {
        return money;
    }
 
    public void setMoney(BigDecimal money) {
        this.money = money;
    }
 
    public String getPhoneNum() {
        return phoneNum;
    }
 
    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }
}

 

 

第二步:再修改spring-mvc.xml配置文件,整合hibernate-validator验证器与国际化配置:

 

<mvc:annotation-driven validator="validator" conversion-service="formatService" />
 
    <bean id="validator" class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
        <property name="providerClass"  value="org.hibernate.validator.HibernateValidator"/>
        <!--指定国际化配置文件 不设置则默认为classpath下的 ValidationMessages.properties -->
        <property name="validationMessageSource" ref="messageSource"/>
    </bean>
<!-- formatter转换配置 -->
    <bean id="formatService"
          class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="formatters">
            <set>
                <bean class="com.sky.locale.demo.formatter.MyDateFormatter" />
                <bean class="com.sky.locale.demo.formatter.MyCurrencyFormatter" />
            </set>
        </property>
</bean>
 
<!-- 国际化资源文件 -->
    <bean id="messageSource"
          class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames" >
            <list>
                <value>/WEB-INF/resource/usermsg</value>
                <value>/WEB-INF/resource/userlabels</value>
            </list>
        </property>
        <property name="defaultEncoding" value="UTF-8"/>
    </bean>

 

 

第三步:在属性配置文件中添加自定义的国家化消息,在中文usermsg_zh_CN.properties配置中添加:

user.name.null=请输入用户名
user.name.error=用户名长度必须在{min}到{max}之间
user.birthday.null=请输入生日
user.birthday.error=生日必须小于当前时间
user.money.null=请输入资产
user.money.error=资产不能超过1000000
user.phoneNum.null=请输入手机号
user.phoneNum.error=手机号必须为11位

 

在英文配置文件usermsg_en_GB.properties中添加:

user.name.null=Please enter a name
user.name.error=name length must between{min} and {max}
user.birthday.null=Please enter a birthday
user.birthday.error=birthday is a past time
user.money.null=Please enter a money
user.money.error=money < 1000000
user.phoneNum.null=Please enter a phoneNum
user.phoneNum.error=phoneNum length is 11

 

ok, 修改完毕,重新启动tomcat,访问http://localhost/add,不填写任何字段,提交表单,显然如下:



 

 

切换到英文(ps:如果切换不成功,tomcat版本请换成tomcat8以上),再次提交表单:



可以看到结果是我们想要的,hibernate-validator验证器与Spring MVC国际化配置整合完成。以上示例代码详见Github地址:https://github.com/gantianxing/locale-demo1.git

 

 

 

  • 大小: 76.8 KB
  • 大小: 8.2 KB
  • 大小: 13.3 KB
  • 大小: 19.7 KB
  • 大小: 14.7 KB
  • 大小: 20.1 KB
0
1
分享到:
评论

相关推荐

    hibernate-validator-6.1.2.Final-dist.zip

    springmvc的服务器表单校验所需要的jar包,java入参验证,支持实体类中对象验证,各种JSR-303标准规定的验证

    JSR303依赖的jar包

    Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。 该压缩包包含了hibernate-validator-5.2.4.Final.jar、hibernate-validator-annotation-processor-5.2.4.Final.jar、...

    Eclipse开发入门与项目实践 源代码

    5.3 Struts应用程序的国际化及表单验证 174 5.3.1 Struts应用程序的国际化 174 案例5-2 实现身份验证应用程序的国际化 178 5.3.2 Struts应用程序中的表单验证 182 案例5-3 实现身份验证应用程序的表单验证...

    网上银行系统(Struts+Hibernate)

    该项目为网上银行系统,使用技术为Struts+Hibernate。 JSP页面采用Tiles框架布局,表单验证没有采用Validator框架验证。 JDK:1.4以上 数据库:SQL Server2000 开发工具:Eclipse+MyEclipse

    java常见的所有框架的api

    java常见的所有框架的API打包 hibernate spring Struts2 还有Validato_表单验证

    lamp-cloud微服务脚手架

    故在hibernate-validator的基础上封装了zuihou-validator-starter起步依赖,提供一个通用接口,可以获取需要校验表单的规则,然后前端使用后端返回的规则, 以后若规则改变,只需要后端修改即可。 12、防跨站脚本...

    java面试宝典

    166、如何用JQuery进行表单验证? 39 167、Prototype如何实现页面局部定时刷新? 40 168、Prototype如何为一个Ajax添加一个参数? 40 169、Ajax请求总共有多少种Callback? 41 170、Javascript如何发送一个Ajax请求?...

    毕业设计:医院在线预约挂号管理系统

    对于每一个功能采取前后端校验,前端使用JQuery验证框架进行表单校验,后端使用HibernateValidator验证框架进行字段校验,保障系统的安全性。权限模块需要使用RBAC权限模式设计数据表,必要时要用SpringMVC框架的...

    XML Editor/Validator/Designer with CAMV-开源

    CAM编辑器是领先的开源XML编辑器/验证/架构工具集,用于快速构建/部署XML / JSON / Hibernate / SQL数据/ Forms应用程序。 可视WYSIWYG数据设计,规则输入向导+拖放字典组件。 将从XML Schema / JSON导入,分析/重构...

    CMS轻量级系统

    天梯(tianti) Java 轻量级的 CMS 解决方案-天梯。天梯是一个用 Java 相关技术搭建的后台 CMS 解决方案,用户可以结合自身业务... 表单验证 :jquery.validator 展现树 :jquery.ztree html模版引擎 :template

    sample-springmvc-portlet:像附加组件一样打包的 Spring MVC Portlet 示例

    本示例中使用了以下功能: Spring MVC Portlet 动作和渲染映射依赖注入(使用@Inject) 表单绑定表单验证(Hibernate Validator)入门第 1 步:安装先决条件:安装(EXO_TOMCAT_ROOT_FOLDER 将用于指定 eXo Tomcat ...

    千方百计笔试题大全

    166、如何用JQuery进行表单验证? 39 167、Prototype如何实现页面局部定时刷新? 40 168、Prototype如何为一个Ajax添加一个参数? 40 169、Ajax请求总共有多少种Callback? 41 170、Javascript如何发送一个Ajax请求?...

    ProductManagementSystem:在这个市场上,客户可以下订单,而管理员可以管理产品库存,查看订单并生成报告

    Hibernate Validator用于表单数据验证 H2内存数据库,用于存储数据 Java Mail API通过SMTP发送HTML电子邮件 JSTL 要求 Java Oracle 阿帕奇Tomcat 玛文 配置 在“ application.properties”中更改SMTP详细信息 登录...

Global site tag (gtag.js) - Google Analytics