【问题标题】:Form validation in Play 2Play 2 中的表单验证
【发布时间】:2013-06-18 15:05:43
【问题描述】:

根据http://www.playframework.com/documentation/2.1.1/JavaForms页面 "从 2.0.2 开始,验证方法可以返回以下类型:字符串、列表或映射>"

但似乎并非如此。

1)返回String时可以正常工作

2 和 3) 列表和地图> 不起作用

下面提供的日志

[2013-06-18 17:59:00.108] 调试 play-akka.actor.default-dispatcher-7 logging:make:28 - 日志提供程序:org.jboss.logging.Log4jLoggerProvider

[2013-06-18 17:59:00.110] 信息 play-akka.actor.default-dispatcher-7 版本::27 - HV000001: Hibernate Validator 4.3.0.Final

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

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

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

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

[2013-06-18 17:59:00.302] 调试 play-akka.actor.default-dispatcher-7 PlatformResourceBundleLocator:getResourceBundle:72 - 找不到验证消息。

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

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

谁能提供返回 List 或 Map 的 validate() 方法的代码 sn-p 以及一些关于它的附加信息。

    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;
    }

【问题讨论】:

  • 我重新编译了项目。 工作!。但是出现了奇怪的日志

标签: java validation playframework playframework-2.0


【解决方案1】:

这是Map 的验证方法:

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

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

ValidationError 接受三个参数。第一个是密钥,第二个是错误消息,第三个是消息参数,作为Objects 的List

【讨论】:

  • 我就是这么做的。错误仍然存​​在。在日志中显示另一个原因
猜你喜欢
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 1970-01-01
相关资源
最近更新 更多