0

这个问题已经在这个网站上被问过很多次了,但我仍然无法弄清楚答案。我正在尝试将表单映射到我拥有的案例类,这是案例类:

  case class MapVitalSign(id:Long,name:String,
    lowerBoundComplicationId:Long, upperBoundComplicationId:Long,
    lowerBound:Double,upperBound:Double) extends VitalSign(  
    id,name,
    lowerBoundComplicationId,upperBoundComplicationId,
    lowerBound,upperBound)

这是我试图将其映射到的代码。

  val vitalSignForm: Form[MapVitalSign] = Form(
    mapping(
      "id" -> ignored(Long), 
      "name" -> text, 
      "lowerBoundComplicationId" -> number, 
      "upperBoundComplicationId" -> number,  
      "lowerBound" -> number, 
      "upperBound" -> number)
      ((id,name,lowerBoundComplicationId,
      upperBoundComplicationId,lowerBound,
      upperBound) => MapVitalSign(id,name,
      lowerBoundComplicationId.toLong,
      upperBoundComplicationId.toLong,lowerBound.toDouble,
      upperBound.toDouble),
      (v:MapVitalSign) => Some(v.id,v.name,v.lowerBoundComplicationId.toInt,v.upperBoundComplicationid.toInt, lowerBound.toInt,upperBound.toInt)    )   
  )

我的映射错误发生在哪里,据我所知,一切似乎都映射到正确的类型,并且争论的数量是正确的。是否与最初忽略的“id”字段有关(因为我的 posgres db 没有生成一个)?

4

2 回答 2

1

如果您的表单和案例类具有相同的字段,您应该能够使用案例类的 apply 和 unapply 方法:

import play.api.data.format.Formats._

val vitalSignForm: Form[MapVitalSign] = Form(
  mapping(
    "id" -> of[Long],
    "name" -> text, 
    ...
  )(MapVitalSign.apply _)(MapVitalSign.unapply _)
)
于 2013-10-30T23:21:59.317 回答
0

正如ignored方法文档所述“当我们在绑定/解除绑定时忽略此参数时,我们必须提供默认值”,您应该为其提供默认值。所以替换ignored(Long)应该ignored(0L)会有所帮助。

于 2013-10-30T23:26:58.570 回答