2
@inputText(
                signupForm("email"), '_label -> "Email",
                '_help -> "Enter a valid email address."
            )

これを純粋なhtmlでどのように記述しますか?

bindfromRequest() コントローラーで(htmlで)使用できるように、signupFormに値を追加する方法がわかりません

編集:

私は通常、このアプローチを使用しました

final static Form<User> signupForm = form(User.class);

そして製本工程

Form<User> filledForm = signupForm.bindFromRequest();

レンダリングされたフォームは次のようになります。

<div class="control-group ">
  <label class="control-label" for="email">Email</label>
  <div class="controls">

    <input type="text" id="email" name="email" value="" >

    <span class="help-inline"></span>
  </div>
</div>

そして、これは私にとってはうまくいきました.純粋なhtmlを使用する方法に興味があったので、独自の小さなヘルパーを作成できました.

編集2:

public static Result blank() {
        return ok(form.render(signupForm));
    }

そしてテンプレート自体で

@(signupForm: Form[User])

編集3:

これが役立つかどうかはわかりませんが、ヘルパーは次のようになります。(inputtext について) これが何を意味するのかさっぱりわかりません。

@(field: play.api.data.Field, args: (Symbol,Any)*)(implicit handler: FieldConstructor, lang: play.api.i18n.Lang)

@input(field, args:_*) { (id, name, value, htmlArgs) =>
    <input type="text" id="@id" name="@name" value="@value" @toHtmlArgs(htmlArgs)>
}
4

1 に答える 1

4

ブラウザーを使用して、Play によってコーダーレンダリングされたソースを確認し、HTML をコピーしてテンプレートに貼り付けます。

一般的に、最も興味深いのは、手動で作成されたフィールドに値を適切に挿入することです。

<input type="text" name="email" value='@signupForm.field("email").value' />

name適切な属性を設定することも重要です。そうしないFormと、コントローラーへの入力が失敗します。

編集:

もちろん、空のアクションでは signupForm は空であるため、値がないのは正常です。次のアクションでは名前を付けましょうsaveBlank。フォームにリクエストのデータを入力し、検証して保存する必要があります。フォームにエラーがある場合はform.scala.view、前のリクエストからフォームにバインドされたデータを使用して再度レンダリングする必要があります。

public static Result saveBlank(){
    signupForm = signupForm.bindFromRequest();
    if (signupForm.hasErrors()){
        return badRequest(form.render(signupForm));
    }

    User user = new User();
    user = signupForm.get();
    user.save();

    return ok("user saved);
}

もちろん、既存のユーザーを編集する場合は、DB からのデータを事前に入力する必要があります。

public static Result edit(Long id){
    signupform = signupForm.fill(User.find.byId(id));
    return ok(form.render(signupForm));
}

(注:頭の中で書いたので、タイプミスやエラーがないかどうかを確認してください)

最後に、すべての場合に Form オブジェクトを使用する必要はありません。次のものも使用できますDynamicForm

public static Result saySomething(){
    DynamicForm df = form().bindFromRequest();
    return("you entered :" + df.get("email"));
}

または1行でも:

public static Result sayShorter(){
    return("you entered :" + form().bindFromRequest().get("email"));
}
于 2012-08-26T15:44:38.627 に答える