Play2.0のフォーム検証とフォームヘルパーにはまだ苦労しています。このログイン画面は、TwitterBootstrapと一緒に使用しています。したがって、私のログインフォームは次のようになります。
@helper.form(routes.Application.authenticate, 'class -> "form-horizontal") {
<fieldset>
<legend>@Messages("login")</legend>
@if(loginForm.hasGlobalErrors) {
<div class="alert alert-error">
<a class="close" data-dismiss="alert">×</a>
@loginForm.globalError.message
</div>
}
@if(flash.contains("success")) {
<div class="alert alert-success">
<a class="close" data-dismiss="alert">×</a>
@flash.get("success")
</div>
}
@inputText(loginForm("email"), '_label -> "Email")
@inputText(loginForm("password"), '_label -> Messages("login.password"))
<div class="form-actions">
<button type="submit" class="btn btn-success">@Messages("button.doLogin")</button>
@Messages("or")
<a class="btn btn-warning" href="routes.LandingPage.index">@Messages("button.doCancel")</a>
</div>
</fieldset>
}
そして、私のTwitterブートストラップフィールドは次のようになります。
@(elements: helper.FieldElements)
@**************************************************
* Generate input according twitter bootsrap rules *
**************************************************@
<div class="control-group @if(elements.hasErrors) {error}">
<label class="control-label" for="@elements.id">@elements.label</label>
<div class="controls">
@elements.input
<span class="help-inline">@elements.infos.mkString(", ")</span>
</div>
</div>
これは出力です:
私が理解していないこと:
1、ヘルプテキストが常に表示されるのはなぜですか(入力フィールドの右側)
ヘルプテキストはから来てい@elements.infos.mkString(", ")
ます。したがって、この行を削除すると、ヘルプテキストが削除されます。または、空の文字列を渡して、ヘルプテキストが表示されないようにすることもできます。'_help -> ""
2、エラーが発生した場合にヘルプテキストのみを表示するにはどうすればよいですか?
このコードを使用すると、ヘルプテキストを追加できます。@elements.errors(elements.lang).mkString(", ")
3、入力テキストフィールドに渡すことができるパラメータは何ですか?クラス名も渡したいのですが、どうしたらいいのかわかりません...
渡すカスタム引数(つまり、クラスまたはプレースホルダー)を定義できます。class="@elements.args.get('_class)
次に、次のように渡すことができます。'_class -> "classname"
implicitFieldConstructors
4、1つのテンプレートパーツに複数を定義できますか?チェックボックスについては、入力ボックスやテキストエリアと比較して別のfieldConstructorが必要ですが、これを行うにはどうすればよいですか?
この例:コンピューターデータベースのサンプルでは、Twitterブートストラップフィールドが定義されていますが、次のように使用されます。
@inputText(loginForm("email"), '_label -> "Email")
ここでの名前が単に入力ではなくinputTextであるのはなぜですか?input.scala.htmlもあるので?
それで、チェックボックスのフィールドハンドラーを作成したい場合、これをどのように使用しますか?次の形式でエラーが発生します。
@checkBoxHandler = @{ FieldConstructor(s2ftheme.constructors.checkbox.render) }
@checkbox(loginForm("remember"), '_label -> Messages("login.remeberme"))(handler = implicitFieldConstructor)
エラーメッセージが表示されます:
not enough arguments for method apply: (implicit handler: views.html.helper.FieldConstructor, implicit lang: play.api.i18n.Lang)play.api.templates.Html in object checkbox. Unspecified value parameter lang.
私はここでコンセプトが欠けていると思います...ありがとう。