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