4

このモデルのバリデーターを使用してフォームをレンダリングする必要があります。

モデル:

    case class Service (
        name: String, description: String, unitcost: Long,
            typo: Char, isactive: Char, modifiedby: String)

コントローラ:

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

    object Services extends Controller {
....
....
    private val servicesForm[Service] = Form(
    mapping(
        "name" -> nonEmptyText.verifying(
            "validation.name.duplicate", Service.findByName(_).isEmpty),
        "description" -> nonEmptyText,
        "unitcost" -> longNumber,
        "typo" -> of[Char],
        "isactive" -> of[Char],
        "modifiedby" -> nonEmptyText
        ) (Service.apply)(Service.unapply)
    )

このコードはすべての [Char] で失敗し、 import play.api.data.format.Formats._ が必要だと言っていますが、私は..

私の 2 番目の疑問は、(タイプミスと isactive) 思考ごとにラジオ ボタンのペアを配置する方法についてです。そのタイプミスにはオプションのような「M」と「A」があり、isactive には「Y」と「N」があります。

PD: 永続化モデルを使用してこれを配置すると思います...

4

1 に答える 1

0

このエラーは、フォームが型の処理方法を認識していないことを示していますChar。タイプに定義されたデフォルトはありませんChar

この問題を解決するには、次の 2 つのオプションがあります。

  1. デフォルトが存在するタイプを から に変更しCharますStringFormatter
  2. を指定FormatterしますChar

フォーマッタは次のようになります (正しいエラー処理がないことに注意してください)。

implicit val charFormat = new Formatter[Char] {
  def bind(key: String, data: Map[String, String]):Either[Seq[FormError], Char] = 
    data.get(key)
    .filter(_.length == 1)
    .map(_.head)
    .toRight(Seq(FormError(key, "error.required", Nil)))

  def unbind(key: String, value: Char) = Map(key -> value.toString)
}
于 2013-02-23T20:21:51.657 に答える