Forms play framework 2中表单映射的相关验证

Forms play framework 2中表单映射的相关验证,forms,validation,playframework-2.0,Forms,Validation,Playframework 2.0,我是否可以为表单创建映射,其中第一个验证依赖于第二个值 val orderForm = Form( mapping( "requiredDelivery" -> boolean, "deliveryAddress" -> text, "comment" -> text) (Order.apply)(Order.unapply) ) 如果requiredDelivery为true,我想检查deliveryAddress是否为n

我是否可以为表单创建映射,其中第一个验证依赖于第二个值

val orderForm = Form(
    mapping(
      "requiredDelivery" -> boolean,
      "deliveryAddress" -> text,
      "comment" -> text)
    (Order.apply)(Order.unapply)
)
如果
requiredDelivery
true
,我想检查
deliveryAddress
是否为
nonEmptyText
,请尝试:

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

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

修复方法是向表单模板中添加如下内容:

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

    @对于(错误),我首先尝试了它(文档中的示例),但问题是validatin的结果是一个常见错误,字段没有错误。如何将字段标记为
    空错误
    字段=>字段匹配{case order=>(order.requiredDelivery&&order.deliveryAddress!=“”)| | |!order.requiredDelivery}
    将更容易
    fields=>fields.requiredDelivery&&!fields.deliveryAddress.isEmpty | |!fields.requiredDelivery
    。我还尝试了:-)发现了相同的问题我认为您不能仅通过检查deliveryAddress来实现这一点,因为您需要requiredDelivery的值来决定是否抛出错误,验证需要是全局验证。