【问题标题】:Verifying two form fields by comparing them in an constraint通过在约束中比较它们来验证两个表单字段
【发布时间】:2014-02-09 19:11:27
【问题描述】:

我目前正在与 Scala 约束作斗争。 我有一个将表单绑定到的案例类和一个映射函数。

但我不知道如何通过比较来验证两个字段(第一个应该大于第二个)

目前我认为应该这样做:

models/JobRequest.scala

package models

case class AddJobRequest (
    exrange: Boolean, 
    exrangefrom: Int,
    exrangeto: Int
)

控制器/Index.scala

package controllers

/* Code code code */

val jobAddForm = Form(
mapping(
  "exrange" -> boolean,
   tuple(
    "exrangefrom" -> number(min = 7, max=19),
    "exrangeto" -> number(min  = 8, max = 20)
   ).verifying("Start number is greater than the stop number!", /** MAGIC GOES HERE */)
  )(AddJobRequest.apply)(AddJobRequest.unapply))

是否有可能检查exrangefrom 是否大于exrangeto?或者这是使用临时约束检查的一种完全错误的方法?

【问题讨论】:

    标签: forms validation scala playframework constraints


    【解决方案1】:

    您可以在mapping(...) 对象上使用verifying!在您的情况下,可以通过这种方式比较 exrangefromexrangeto

    package controllers
    
    /* Code code code */
    
    val jobAddForm = Form(
      mapping(
        "exrange" -> boolean,
        "exrangefrom" -> number(min = 7, max=19),
        "exrangeto" -> number(min  = 8, max = 20)
      )(AddJobRequest.apply)(AddJobRequest.unapply)
      verifying(
        "Start number is greater than the stop number!",
        addJobRequest => addJobRequest.exrangefrom < addJobRequest.exrangeto
      )
    )
    

    希望这是你所期望的 ;)

    【讨论】:

    • 是的,谢谢 :) 我认为有像你这样的解决方案,但我尝试直接在映射对象中进行验证,而不是在映射之后。好吧,如果它有效-> 太棒了!如果我要验证映射对象中的字段,会有什么区别(可能是逻辑或性能)?它会更快吗(因为在映射字段时会立即返回错误)?谢谢;)
    • 我不确定你是否会通过在 mapping 对象上调用 verifying 而不是在每个字段上单独调用来降低性能:是的,你的对象的方法 apply 被调用,但verifying 方法只被调用一次。尽管如此,如果您需要验证仅涉及它的约束的字段(而不是很多字段),请在要检查的每个字段上调用 ​​verifying 方法;)应该在 @987654332 上调用 verifying 方法@object 仅当您需要比较多个字段时。
    猜你喜欢
    • 1970-01-01
    • 2018-02-21
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 2019-04-24
    • 2015-02-07
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多