7

Play Framework 2 で scala テンプレートをレンダリングするときにオプションのパラメーターを定義することは可能ですか?

私のコントローラーは次のようになります。

public static Result recoverPassword() {
    Form<RecoveryForm> resetForm = form(RecoveryForm.class);
    return ok(recover.render(resetForm));
    // On success I'd like to pass an optional parameter:
    // return ok(recover.render(resetForm, true));
}

私の Scala テンプレートは次のようになります。

@(resetForm: Form[controllers.Account.RecoveryForm], success:Boolean = false)

また試しました:

@(resetForm: Form[controllers.Account.RecoveryForm]) (success:Boolean = false)

どちらの場合も、「エラー: クラス リカバリのメソッド レンダーを特定の型に適用できません。」というメッセージが表示されました。

4

1 に答える 1

6

Javaコントローラーから値の割り当てを省略することはできません(Scalaコントローラーまたは他のテンプレートでは機能します)。この状況で最も速くてクリーンなソリューションは、毎回デフォルト値で割り当てることです。

public static Result recoverPassword() {
    Form<RecoveryForm> resetForm = form(RecoveryForm.class);

    if (!successfullPaswordChange){
        return badRequest(recover.render(resetForm, false));
    }

    return ok(recover.render(resetForm, true));
}

テンプレートを呼び出すことができるScalaコントローラーやその他のテンプレートは、デフォルト値が指定されていない場合はデフォルト値を尊重するため、Scalaテンプレートは変更しないでおくことができます。

ところで:ご覧のとおり、Playから結果を返すには、適切なメソッドを使用する必要があります。vsも参照してactionsください:、などok()badRequest()forrbiden()notFound()

また、フラッシュスコープを使用してメッセージをredirect()入力し、パスワードの変更が成功した後にメインページに使用することもできます。その後、フラッシュメッセージが存在するかどうかを確認し、表示することができます。

public static Result recoverPassword() {
    ...
    if (!successfullPaswordChange){
        return badRequest(recover.render(resetForm, false));
    }

    flash("passchange.succces", "Your password was reseted, check your mail");
    return redirect(routes.Application.index());
}

任意のテンプレートで:

@if(flash.containsKey("passchange.succces")) {
    <div class="alert-message warning">
        <strong>Done!</strong> @flash.get("passchange.succces")
    </div>
} 

(このスニペットは、Java用のコンピューターデータベースサンプルからコピーされているため、自分のディスクで確認できます)

于 2012-08-07T10:57:01.667 に答える