Forms 通过在约束中比较两个表单字段来验证它们

Forms 通过在约束中比较两个表单字段来验证它们,forms,validation,scala,playframework,constraints,Forms,Validation,Scala,Playframework,Constraints,我目前正在与Scala约束作斗争。 我有一个将表单绑定到的case类和一个映射函数 但是我不知道如何通过比较来验证两个字段,第一个字段应该大于第二个字段 目前我认为应该这样做: models/JobRequest.scala 控制器/Index.scala 是否可以检查exrangefrom是否大于exrangeto?或者,这是一种完全不好的方法来检查是否使用特殊约束?您可以在映射上使用验证。。。对象在您的情况下,可以通过以下方式比较exrangefrom和exrangeto: package

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

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

目前我认为应该这样做:

models/JobRequest.scala

控制器/Index.scala

是否可以检查exrangefrom是否大于exrangeto?或者,这是一种完全不好的方法来检查是否使用特殊约束?

您可以在映射上使用验证。。。对象在您的情况下,可以通过以下方式比较exrangefrom和exrangeto:

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
  )
)
希望这是你所期望的

您可以在映射上使用验证。。。对象在您的情况下,可以通过以下方式比较exrangefrom和exrangeto:

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

希望这是你所期望的

是的,谢谢你:我认为有类似于你的解决方案,但我尝试直接在映射对象中进行验证,而不是在映射之后。好吧,如果它有效->那太好了!如果我验证映射对象中的字段,那么逻辑或性能会有什么不同?它是否会因为在映射字段时返回即时错误而更快?非常感谢。我不确定通过在映射对象上调用Verification而不是在每个字段上单独调用Verification是否会降低性能:是的,会调用对象的apply方法,但Verification方法只调用一次。尽管如此,如果您需要验证一个字段,并且该字段的约束只与该字段相关,而不是与许多字段相关,请对要检查的每个字段调用Verification方法;只有在需要比较多个字段时,才应在映射对象上调用验证方法。是的,谢谢:我认为有类似于您的解决方案,但我尝试直接在映射对象中进行验证,而不是在映射之后。好吧,如果它有效->那太好了!如果我验证映射对象中的字段,那么逻辑或性能会有什么不同?它是否会因为在映射字段时返回即时错误而更快?非常感谢。我不确定通过在映射对象上调用Verification而不是在每个字段上单独调用Verification是否会降低性能:是的,会调用对象的apply方法,但Verification方法只调用一次。尽管如此,如果您需要验证一个字段,并且该字段的约束只与该字段相关,而不是与许多字段相关,请对要检查的每个字段调用Verification方法;仅当需要比较多个字段时,才应在映射对象上调用验证方法。
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
  )
)