在Play 2中进行表单验证

时间:2013-06-18 15:05:43

标签: java validation playframework playframework-2.0

根据http://www.playframework.com/documentation/2.1.1/JavaForms页面 “从2.0.2开始,validate-method可以返回以下类型:String,List或Map>”

但似乎并非如此。

1)返回String时工作正常

2和3)列表和地图>将无法正常工作

以下提供的日志

[2013-06-18 17:59:00.108] DEBUG play-akka.actor.default-dispatcher-7 logging:make:28 - Logging Provider:org.jboss.logging.Log4jLoggerProvider

[2013-06-18 17:59:00.110] INFO play-akka.actor.default-dispatcher-7 Version :: 27 - HV000001:Hibernate Validator 4.3.0.Final

[2013-06-18 17:59:00.119] DEBUG play-akka.actor.default-dispatcher-7 DefaultTraversableResolver:detectJPA:106 - 在包含'getPersistenceUtil'的类路径上找到javax.persistence.Persistence。假设JPA 2环境。尝试实例化JPA感知的TraversableResolver

[2013-06-18 17:59:00.120] DEBUG play-akka.actor.default-dispatcher-7 DefaultTraversableResolver:detectJPA:117 - 类型为org.hibernate.validator.internal.engine.resolver的实例化JPA感知TraversableResolver .JPATraversableResolver。

[2013-06-18 17:59:00.122] DEBUG play-akka.actor.default-dispatcher-7 ValidationXmlParser:getValidationConfig:184 - 尝试为基于XML的Validator配置加载META-INF / validation.xml。

[2013-06-18 17:59:00.126] DEBUG play-akka.actor.default-dispatcher-7 ValidationXmlParser:getValidationConfig:187 - 未找到META-INF / validation.xml。仅使用基于注释的配置。

[2013-06-18 17:59:00.302] DEBUG play-akka.actor.default-dispatcher-7 PlatformResourceBundleLocator:getResourceBundle:72 - 找不到ValidationMessages。

[2013-06-18 17:59:00.304] DEBUG play-akka.actor.default-dispatcher-7 PlatformResourceBundleLocator:getResourceBundle:69 - org.hibernate.validator.ValidationMessages found。

应该承认,根据日志格式,它不是由play.Logger创建的,而是另一个。

任何人都可以提供返回List或Map>的validate()方法的代码片段。以及一些关于它的其他信息。

    public Map<String, List<ValidationError>> validate() {
        Map<String,List<ValidationError>> errors = new HashMap<>();

        if (User.find.where().eq("login", login).findRowCount() > 0) {
            List<ValidationError> errorList = new ArrayList<>();
            errorList.add(new ValidationError("login", Messages.get("user.registration.notUniqueLogin", login), null));
            errors.put("login", errorList);
        }
        if (User.find.where().eq("email", email).findRowCount() > 0) {
            List<ValidationError> errorList = new ArrayList<>();
            errorList.add(new ValidationError("email", Messages.get("user.registration.notUniqueEmail", email), null));
            errors.put("email", errorList);
        }

        return errors;
    }

1 个答案:

答案 0 :(得分:0)

这是Map的验证方法:

public Map<String, List<ValidationError>> validate()
{
  Map<String, List<ValidationError>> errors = new HashMap<String, List<ValidationError>>();
  // do validation
  return errors;
}

地图条目键是表单字段的名称,值是与该字段关联的所有错误的List。如果你想添加一个全局错误,那么我认为你传入一个空字符串""作为密钥。

ValidationError有三个参数。第一个是密钥,第二个是错误消息,第三个是List Object的消息参数。