【问题标题】:How do I set a custom validation error on a specific form field in Play! 2.*如何在 Play 中的特定表单字段上设置自定义验证错误! 2.*
【发布时间】:2012-09-13 10:20:11
【问题描述】:

基本上我有以下表单类。

public static class BasicForm {
    @Required
    public String name;
    @Required
    @Email
    public String email;
    @Required
    public String password;
    @Required
    public String confirmPassword;

    public List<ValidationError> validate() {
        if (User.findByEmail(email) != null) {
            List<ValidationError> validationErrorList = new ArrayList<ValidationError>();
            validationErrorList.add(new ValidationError("email", "error.alreadyexists", new ArrayList<Object>()));
            return validationErrorList;
        }
        return null;
    }

}

如您所见,我正在尝试验证电子邮件地址的唯一性。 如果电子邮件不是唯一的,我想在电子邮件字段中显示错误消息,而不是作为全局错误消息

实现 validate() 方法的正确方法是什么?

【问题讨论】:

    标签: validation playframework-2.0


    【解决方案1】:

    您应该使用带有以下签名的validate 方法:

    public Map<String, List<ValidationError>> validate()
    

    通过这种方式,您可以向单个字段添加错误,如下所示:

    Map<String, List<ValidationError>> errors = null;
    if (emailIsBad) {
        errors = new HashMap<String, List<ValidationError>>();
        List<ValidationError> list = new ArrayList<ValidationError>();
        list.add(new ValidationError("email", "email is bad"));
        errors.put("email", list);
    }
    return errors;
    

    请注意,如果您应该返回一个 empty 地图,它仍然会将表单呈现为错误的。如果想让validate()方法成功,需要返回null。

    【讨论】:

    • 你们是怎么做到的? List 不能被实例化,因为它是一个接口。此外,String 不会隐式转换为 ValidationError,因此 list.add("email is bad") 也不起作用。我对 Java 或 Play 不是很有经验,所以可能是我错过了什么?
    • @LeoHernandez 我稍微更新了示例代码以解决您的问题。
    • 真的帮到我了!! 100K 谢谢!我现在使用它来避免出现实际上涉及特定领域的全局错误,太好了!
    【解决方案2】:

    没有足够的代表发表评论(还),但不要忘记包含正确的导入语句:

    import.play.data.validation.*;
    

    由于陈述不正确,我浪费了几分钟。

    【讨论】:

      【解决方案3】:

      这是我根据丹尼尔的 代码: 我的代码会检查密码确认。

      public Map<String, List<ValidationError>> validate() {
             Map<String, List<ValidationError>> errors = null;
      
                  if (!password.equals(confirmPassword)) {
                      errors = new HashMap<>();
                      List<ValidationError> list = new ArrayList<>();
                      list.add(new ValidationError("password", "Passwords do not match"));
                      errors.put("password",list);
                      errors.put("confirmPassword", list);
                  }
      
                  return errors;
              }
      

      【讨论】:

        猜你喜欢
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-30
        相关资源
        最近更新 更多