【问题标题】:Dependent validation for form mapping in play framework 2游戏框架2中表单映射的依赖验证
【发布时间】:2014-03-28 14:14:12
【问题描述】:

我可以为表单创建映射,其中第一个验证取决于第二个值吗?

val orderForm = Form(
    mapping(
      "requiredDelivery" -> boolean,
      "deliveryAddress" -> text,
      "comment" -> text)
    (Order.apply)(Order.unapply)
)

如果requiredDeliverytrue,我想检查deliveryAddress 中的nonEmptyText

【问题讨论】:

    标签: forms validation playframework-2.0


    【解决方案1】:

    试试:

    val orderForm = Form(
        mapping(
          "requiredDelivery" -> boolean,
          "deliveryAddress" -> text,
          "comment" -> text)
        (Order.apply)(Order.unapply) verifying("Address is required!", fields => fields match {
          case order => (order.requiredDelivery && order.deliveryAddress!="") || !order.requiredDelivery
        })
    )
    

    【讨论】:

    • 我首先尝试过(文档中的示例),但问题是验证的结果是一个常见错误,并且字段没有错误。我如何用empty error标记字段
    • fields => fields match { case order => (order.requiredDelivery && order.deliveryAddress!="") || !order.requiredDelivery } 会更容易fields => fields.requiredDelivery && !fields.deliveryAddress.isEmpty || !fields.requiredDelivery。我也试过:-)
    • 我认为您不能仅通过检查 deliveryAddress 来做到这一点,因为您需要 requiredDelivery 的值来决定是否抛出错误,验证需要是全局的。
    【解决方案2】:

    在映射定义进入“全局错误”之后,由“验证”子句导致的任何表单验证错误。表单助手不会显示这些错误,因此任何典型的模板都会出现空白但无法成功提交表单。

    解决方法是在表单模板中添加类似的内容:

    @if(userForm.hasGlobalErrors) {
      <ul>
      @for(error <- userForm.globalErrors) {
        <li>@error.message</li>
      }
      </ul>
    }
    

    您可以通过查看此页面并跳至“在视图模板中显示错误”部分了解更多信息 - http://www.playframework.com/documentation/2.3-SNAPSHOT/ScalaForms

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多