在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中找到一个有效的示例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)