如何在Play Framework 2.0中创建自定义验证器?

如何在Play Framework 2.0中创建自定义验证器?,第1张

如何在Play Framework 2.0中创建自定义验证器?

在Play 2.0中,验证框架扩展到数据的实际验证范围之外:

  • 注释-使用’@’符号轻松声明验证约束
  • 验证器-实际上实现了验证背后的逻辑
  • 消息-显示参数化的错误消息(符合i18)
  • 最后,HTML帮助程序-将所有以前的内容粘合在一起

HTML Helpers是Play
2.0的新功能。在1.x中,Play在执行定义良好的验证框架方面已经相当出色。它功能强大且易于使用。但是,我们仍然必须将HTML表单和验证框架连接在一起。这可能会使初学者有些困惑。

现在,使用Play 2.0可以自动完成此 *** 作。

但是,让我们关注答案并提供一些指导:我们将创建一个 AllUpperCase 验证器,该验证器在以下情况下都会产生错误:

  • 输入的不是字符串
  • 输入为空
  • 字符之一是小写。
验证者
package myvalidators;import javax.validation.*;public class AllUpperCasevalidator         extends play.data.validation.Constraints.Validator<Object>         implements ConstraintValidator<AllUpperCase, Object> {        final static public String message = "error.alluppercase";        public void initialize(AllUpperCase constraintAnnotation) {}        public boolean isValid(Object object) {        if(object == null) return false;        if(!(object instanceof String)) return false;        String s = object.toString();          for(char c : s.toCharArray()) { if(Character.isLetter(c) && Character.isLowerCase(c))     return false;        }        return true;    }        public static play.data.validation.Constraints.Validator<Object> alluppercase() {        return new AllUpperCasevalidator();    }}

您可能会注意到的第一件事是导入:Play 2.0确实符合JSR 303-Bean验证框架。在这种情况下,验证器需要实现
ConstraintValidator 。在我们的案例中,它将转换为类
的注解

AllUpperCase
(我们将在稍后介绍),将T转换为泛型
Object

验证器很简单:
我们定义了方法 public boolean isValid(Object object)
,如果验证通过,则该方法返回一个布尔值。还有一个消息ID和一个实例化验证程序的方法。

注释

下面的类定义了一个命名注释

@AllUpperCase
,该注释不带任何参数,但可以强制执行先前定义的验证。提供与注释框架相关的详细信息超出了本文的范围。

package myvalidators;import java.lang.annotation.*;import static java.lang.annotation.ElementType.*;import static java.lang.annotation.RetentionPolicy.*;import javax.validation.*;@Target({FIELD})@Retention(RUNTIME)@Constraint(validatedBy = AllUpperCasevalidator.class)@play.data.Form.Display(name="constraint.alluppercase")public @interface AllUpperCase {    String message() default AllUpperCasevalidator.message;    Class<?>[] groups() default {};    Class<? extends Payload>[] payload() default {};}

请注意注释如何与拼图的其他部分粘合。

  • @Constraint
    JSR 303批注链接到验证器
  • @play.data.Form.Display
    ,将注释链接到play html帮助器。请注意,该名称很重要:我们正在定义一个名为 alluppercase*约束 。Play使用此信息来调用Validator上的方法。 *
    public static play.data.validation.Constraints.Validator<Object> alluppercase()
  • 最后请注意,默认消息是在注释界面中设置的。
用法

现在,我们有了自定义验证器和注释

import myvalidators.*;public static class MyData {    @AllUpperCase    public String name;}

描述用法不在本文讨论范围之内,请在此URL中找到一个有效的示例



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5054303.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-15
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存