zoukankan      html  css  js  c++  java
  • JSR-303规范,Bean Validation

    一:

    JSR 303是JAVA EE 6中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator,此实现与Hibernate ORM没有任何关系。JSR 303用于对Java Bean中的字段的值进行验证。

    本教程翻译自Hibernate Validator 4.0 GA指南,并参考JSR 303的规范,本着尽量不用JSR规范之外的特性,文档在编写时尽量不提及底层实现Hibernate Validator,而是关注Bean Validation规范本身。如果有不对之处,请大家多提意见,互相提高,谢谢! 小弟编写的中文手册在压缩包中,和Hibernate Validator 4.0 GA放在一起,省得大家再下载jar文件了哦!嘿嘿!

    那个大家多提意见哦!谢谢!哈!

    文章source:http://www.iteye.com/topic/500928

    hibernate-validator-4.0.0.GA-dist.zip (4.8 MB)下载地址:    http://dl.iteye.com/topics/download/d3374bdc-5a36-3270-8ffc-624356cf0716

    二:

     JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,官方参考实现是Hibernate Validator。
    此实现与Hibernate ORM 没有任何关系。JSR 303 用于对Java Bean 中的字段的值进行验证。

    Spring MVC 3.x之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证。

    JSR 303内置的约束规则:

    @AssertTrue / @AssertFalse

    • 验证适用字段:boolean
    • 注解说明:验证值是否为true / false
    • 属性说明:-


    @DecimalMax / @DecimalMin

    • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
    • 注解说明:验证值是否小于或者等于指定的小数值,要注意小数存在精度问题
    • 属性说明:公共


    @Digits

    • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
    • 注解说明:验证值的数字构成是否合法
    • 属性说明:integer:指定整数部分的数字的位数。fraction: 指定小数部分的数字的位数。


    @Future / @Past

    • 验证适用字段:Date,Calendar
    • 注解说明:验证值是否在当前时间之后 / 之前
    • 属性说明:公共


    @Max / @Min

    • 验证适用字段:BigDecimal,BigInteger,String,byte,short,int,long
    • 注解说明:验证值是否小于或者等于指定的整数值
    • 属性说明:公共


    @NotNull / @Null

    • 验证适用字段:引用数据类型
    • 注解说明:验证值是否为非空 / 空
    • 属性说明:公共


    @Pattern

    • 验证适用字段:String
    • 注解说明:验证值是否配备正则表达式
    • 属性说明:regexp:正则表达式flags: 指定Pattern.Flag 的数组,表示正则表达式的相关选项。


    @Size

    • 验证适用字段:String,Collection,Map,数组
    • 注解说明:验证值是否满足长度要求
    • 属性说明:max:指定最大长度,min:指定最小长度。


    @Valid

    • 验证适用字段:引用类型
    • 注解说明:验证值是否需要递归验证
    • 属性说明:无



    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


    使用Spring MVC 和 JSR-303的标注做表单提交的服务器端验证时,
    @Valid 标注的Command对象和BindingResult参数一定要紧挨着。要不然
    数据绑定错误直接抛异常,不会封装成一个BindingResult对象。

    Java代码
    @RequestMapping(value="/login", method=RequestMethod.POST)   
    1. public String login(@Valid User user, BindingResult br, Map<String, Object> model) {   
    2.     if (br.hasErrors()) {   
    3.         return "login";   
    4.     }   
    5.     return "redirect:/salary/list.do";   
    6. }  

    下:

    三: 

    spring 3 mvc BindingResult result 校验注意点

    BindingResult result 的使用,必须在controller层增加@ModelAttribute("fundsPreTransfer") 它和ModelAttribute同时使用,并且参数要紧挨着。这样才不会报。Errors/BindingResult argument declared without preceding model attribute异常。

    注意:

    @RequestMapping("/funds/transfer/save")
        public String save(
                @ModelAttribute("fundsPreTransfer") FundsPreTransfer fundsPreTransfer,
                BindingResult result, Model model, HttpServletRequest request) {

            // 服务器端校验
            fundsTransferValidator.validate(fundsPreTransfer, result);
            if (result.hasErrors()) {
                // 如果存在错误,则跳转到显示页面
                return "funds/transfer/show";
            }

            Double transferAmount = fundsPreTransfer.getTransferAmount();
            String comments = fundsPreTransfer.getComments();

            fundsPreTransfer.setTransferIp(request.getRemoteAddr());
            // query fundsSerialNumber
            String fundsSerialNumber = RandomStringUtils.random(9, false, true);
            fundsPreTransfer.setFundsSerialNumber(fundsSerialNumber);// 设置流水号
            // 保存转账记录。
            fundsPreTransferService.persist(fundsPreTransfer, getUsername(),
                    transferAmount);

            // 传递值到下一页面。
            String fundsAccount = request.getParameter("fundsAccount");// 资金账号
            model.addAttribute("fundsAccount", fundsAccount);
            model.addAttribute("counterpartyFundsAccount",
                    request.getParameter("counterpartyFundsAccount"));
            // 查出username
            FundsBase fundsBase = fundsBaseService.findByFundsAccount(fundsAccount);
            BaseAccount baseAccount = fundsBase.getBaseAccount();
            String username = baseAccount.getUsername();
            model.addAttribute("username", username);
            model.addAttribute("transferAmount", transferAmount);
            model.addAttribute("comments", comments);
            model.addAttribute("fundsSerialNumber", fundsSerialNumber);

            return "funds/transfer/show_next";
        }

  • 相关阅读:
    (zt)在PHP中使用全局变量
    (zt)Flash与C++交互
    (zt)关于Flash Socket通信的安全策略问题的一点心得
    (zt)svn 随服务器启动
    使用InstallShield安装和卸载SQL Server数据库(利用sql脚本)
    异常查看部分代码
    VC为控件添加背景
    深入分析MFC文档视图结构
    VC数据库编程概述
    (转)WEB程序打包详解:(连接SQL2005数据库,修改配置文件,建立虚拟目录)
  • 原文地址:https://www.cnblogs.com/duanxz/p/3896952.html
Copyright © 2011-2022 走看看