2

プレイフォームに10進数を入力できるようにしたいです。次のマッピングが必要ですが、コンパイルされません。

mapping(
 "id" -> ignored(NotAssigned:Pk[Long]),
 "date" -> date("yyyy-MM-dd"),
 "amount" -> decimal,
 "description" -> nonEmptyText
)(Expense.apply)(Expense.unapply)

方法があるはずです。私は Scala と Play を初めて使用します。任意のポインタ、大歓迎です。

4

3 に答える 3

4

of[T]objectFormsには、 type のマッピングを作成するメソッドがありますT。あなたの場合は次のようになりますof[Int]

mapping(
 "id" -> ignored(NotAssigned:Pk[Long]),
 "date" -> date("yyyy-MM-dd"),
 "amount" -> of[Int],
 "description" -> nonEmptyText
)(Expense.apply)(Expense.unapply)

2つのヘルパーメソッドもあります

val number: Mapping[Int] = of[Int]
val longNumber: Mapping[Long] = of[Long]

これは単なる参照ジェネリックof関数です。

于 2012-10-12T06:30:18.563 に答える
2

必要な暗黙の実際のコードは次のとおりです。私自身の型にもこれらがたくさんあるので、それらを別のオブジェクトに入れました。Formこのように sでカスタム型を使用できるのは非常に便利です。

object FormFieldImplicits {
  // Code merged into future Play release
  //
  implicit def doubleFormat = new Formatter[Double] {
    def bind(key: String, data: Map[String, String]) = Right(data(key).toDouble)
    def unbind(key: String, value: Double) = Map(key -> value.toString)
  }

  ...
}

次に、次のように a と Bob's your uncleimport FormFieldImplicits._を使用するコントローラーでmapping of[Double]

def impactMapping = mapping(
    "value" -> of[Double],
    "percent" -> of[Double])(Impact.apply)(Impact.unapply)
于 2012-10-13T09:29:23.457 に答える