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's 返回结果actions,另请参见ok()vs badRequest(): forrbiden(),notFound()

您还可以使用flash 范围填充消息并redirect()在成功更改密码后使用到主页,然后您可以检查 flash 消息是否存在并显示它:

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 回答