ドキュメント

§フォームテンプレートヘルパー

Playには、HTMLテンプレートでフォームフィールドをレンダリングするのに役立ついくつかのヘルパーが用意されています。

§<form>タグの作成

最初のヘルパーは<form>タグを作成します。これは、渡されたリバースルートに応じてactionおよびmethodタグパラメータを自動的に設定する非常にシンプルなヘルパーです。

@helper.form(action = routes.Application.submit) {

}

生成されたHTMLに追加される追加のパラメータセットを渡すこともできます。

@helper.form(action = routes.Application.submit, Symbol("id") -> "myForm") {

}

§<input>要素のレンダリング

views.html.helperパッケージにはいくつかの入力ヘルパーがあります。これらにフォームフィールドを渡すと、対応するHTMLフォームコントロールが、入力された値、制約、エラーとともに表示されます。

@(myForm: play.data.Form[User])(implicit messages: play.i18n.Messages)

@helper.form(action = routes.Application.submit) {

    @helper.inputText(myForm("email"))

    @helper.inputPassword(myForm("password"))

}

formヘルパーと同様に、生成されたHTMLに追加される追加のパラメータセットを指定できます。

@helper.inputText(myForm("email"), Symbol("id") -> "email", Symbol("size") -> 30)

注意: すべての追加パラメータは、_文字で始まるものを除き、生成されたHTMLに追加されます。アンダースコアで始まる引数は、フィールドコンストラクタ引数(後述)用に予約されています。

§HTML入力の作成を自分で処理する

必要なHTML結果を記述できる、より汎用的なinputヘルパーもあります。

@helper.input(myForm("email")) { (id, name, value, args) =>
    <input type="date" name="@name" id="@id" @toHtmlArgs(args)>
}

§フィールドコンストラクタ

レンダリングされたフィールドは、<input>タグだけでなく、<label>や、フィールドを装飾するためにCSSフレームワークで使用される他の多数のタグも必要になる場合があります。

すべての入力ヘルパーは、この部分を処理する暗黙的なFieldConstructorを受け取ります。デフォルトのもの(スコープ内に他のフィールドコンストラクタがない場合に使用される)は、次のようなHTMLを生成します。

<dl class="error" id="email_field">
    <dt><label for="email">Email:</label></dt>
    <dd><input type="text" name="email" id="email" value=""></dd>
    <dd class="error">This field is required!</dd>
    <dd class="error">Another error</dd>
    <dd class="info">Required</dd>
    <dd class="info">Another constraint</dd>
</dl>

このデフォルトのフィールドコンストラクタは、入力ヘルパー引数で渡すことができる追加のオプションをサポートしています。

'_label -> "Custom label"
'_id -> "idForTheTopDlElement"
'_help -> "Custom help"
'_showConstraints -> false
'_error -> "Force an error"
'_showErrors -> false

§独自のフィールドコンストラクタを作成する

多くの場合、独自のフィールドコンストラクタを作成する必要があります。まず、次のようなテンプレートを作成します。

@(elements: helper.FieldElements)

<div class="@if(elements.hasErrors) {error}">
<label for="@elements.id">@elements.label</label>
<div class="input">
    @elements.input
    <span class="errors">@elements.errors.mkString(", ")</span>
    <span class="help">@elements.infos.mkString(", ")</span>
</div>
</div>

それをviews/に保存し、myFieldConstructorTemplate.scala.htmlと名前を付けます。

注意: これは単なるサンプルです。必要に応じて複雑にすることができます。@elements.fieldを使用して元のフィールドにアクセスすることもできます。

次に、次を使用して、どこかにFieldConstructorを作成します。

@implicitField: FieldConstructor = @{ FieldConstructor(myFieldConstructorTemplate.f) }

@inputText(myForm("email"))

§繰り返し値の処理

最後のヘルパーは、繰り返し値の入力を簡単に生成できるようにします。次のようなフォーム定義があると仮定します。

public class UserForm {

  private String name;
  private List<String> emails;

  public void setName(String name) {
    this.name = name;
  }

  public String getName() {
    return name;
  }

  public void setEmails(List<String> emails) {
    this.emails = emails;
  }

  public List<String> getEmails() {
    return emails;
  }
}

このように繰り返しデータを使用している場合は、HTTPリクエストでフォーム値を送信する2つの方法があります。1つ目は、パラメータに空の括弧ペアを接尾辞として付ける方法です(例: “emails[]”)。このパラメータは、標準的な方法で繰り返すことができます(例:http://foo.com/request?emails[][email protected]&emails[][email protected])。または、クライアントは配列の添え字でパラメータに明示的に一意の名前を付けることができます(例:emails[0]emails[1]emails[2]など)。この方法では、入力の順序を維持することもできます。

フォームに含まれる数だけemailsフィールドの入力を生成する必要があります。そのためには、repeatヘルパーを使用するだけです。

@helper.inputText(userForm("name"))

@helper.repeat(userForm("emails"), min = 1) { emailField =>

    @helper.inputText(emailField)

}

対応するフォームデータが空の場合でも、最小限のフィールド数を表示するには、minパラメータを使用します。

フィールドのインデックスにアクセスする場合は、代わりにrepeatWithIndexヘルパーを使用できます。

@helper.repeatWithIndex(userForm("emails"), min = 1) { (emailField, index) =>

    @helper.inputText(emailField, Symbol("_label") -> ("email #" + index))

}

次へ: Jsonの操作


このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインを読んだ後、プルリクエストを遠慮なく送信してください。質問や共有できるアドバイスがありますか?コミュニティフォーラムにアクセスして、コミュニティとの会話を始めましょう。