7

Play Framework 2のフィールドコンストラクターの外部にあるフォームフィールドの検証エラーを表示するにはどうすればよいですか?これが私が試したことです:

@eventForm.("name").error.message

そして、私はこのエラーを受け取ります:

value message is not a member of Option[play.api.data.FormError]

APIドキュメントで、メッセージはFormErrorのメンバーであると記載されているため、混乱しています。また、これはグローバルエラーに対しても正常に機能します。

@eventForm.globalError.message
4

2 に答える 2

7

ここでフォームのソースコードをチェックして、それをよりよく理解することができます

Form適用メソッドを定義します。

 def apply(key: String): Field = Field(
    this,
    key,
    constraints.get(key).getOrElse(Nil),
    formats.get(key),
    errors.collect { case e if e.key == key => e },
    data.get(key))

それは、ドキュメントで述べられているように、フィールドが存在しない場合でも、任意のフィールドを返します。そして、aFieldには:errorsを返すメンバーがあります。Seq[FormError]

だから、あなたはそのようなことをすることができます(のためにSeq[FormError]):

eventForm("name").errors.foreach { error =>
  <div>@error.message</div>
}

または(の場合Option[FormError]

eventForm("name").error.map { error =>
  <div>@error.message</div>
}

または、次を使用できますForm errors

  def errors(key: String): Seq[FormError] = errors.filter(_.key == key)

そして、与えられたキーのすべてのエラーを取得します。このように(のためにSeq[FormError]):

eventForm.errors("name").foreach { error =>
      <div>@error.message</div>
}

または(の場合Option[FormError]

eventForm.error("name").map { error =>
          <div>@error.message</div>
}

詳細が必要な場合は、ソースコードを確認してください。それはよく書かれていて、よくコメントされています。

乾杯!

編集:

biesiorがコメントしたように:さまざまな言語で人間が読めるきれいなメッセージを表示するには、ここでI18Nがどのように機能するかを確認する必要があります

徹底的に言うと、おそらくI18Nに対処する必要があります。すべてを機能させるのは難しいことではありません。ドキュメントを読んだ後でも、少し戸惑うかもしれません。少しプッシュします。messagesフォルダにファイルを追加すると、ここconfからそのコンテンツをコピーできます。そうすれば、デフォルトのメッセージをより細かく制御できます。今、あなたの見解では、あなたはそのようなことをすることができるはずです:

eventForm.errors("name").foreach { error =>
          <div>@Messages(error.message, error.args: _*)</div>
}

たとえば、ファイルで以前に定義されたメッセージが表示されるerror.message場合などです。エラーメッセージが処理する可能性のあるいくつかの引数を定義します。たとえば、を処理している場合、anは必要な最小値である可能性があります。メッセージでは、パターンに従う必要があります。ここで、nは引数の順序です。error.invalidconf/messagesInvalid valueargserror.minarg{n}

もちろん、次のような独自のメッセージを定義することができます。

error.futureBirthday=Are you sure you're born in the future? Oowww hay, we got ourselves a time traveler!

そして、コントローラーでは、そのようにフォームをチェックできます(1行のコードでその感覚を示すことができます)

"year" -> number.verifying("error.furtureBirthday", number <= 2012) // 2012 being the current year

言語をいじりたい場合は、ドキュメントに従ってください。

乾杯、また!

于 2012-12-22T19:19:39.253 に答える
3

あなたが自分で言ったように、はのmessageメンバーですFormErrorが、あなたは。を持っていますOption[FormError]。あなたが使うことができます

eventForm("name").error.map(_.message).getOrElse("")

エラーがある""場合とない場合は、メッセージが表示されます。

于 2012-12-22T18:30:46.187 に答える