joa*_*ann 7 java parameters templates playframework playframework-2.0
在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));
}
Run Code Online (Sandbox Code Playgroud)
我的Scala模板如下所示:
@(resetForm: Form[controllers.Account.RecoveryForm], success:Boolean = false)
Run Code Online (Sandbox Code Playgroud)
还尝试过:
@(resetForm: Form[controllers.Account.RecoveryForm]) (success:Boolean = false)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下我都得到"错误:类恢复中的方法渲染不能应用于给定类型;"
从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));
}
Run Code Online (Sandbox Code Playgroud)
Scala模板可以保持不变,因为Scala控制器和其他可以调用模板的模板将遵循默认值(如果没有在那里给出).
BTW:你可以看到,你应该使用正确的方法从Play的返回结果actions
,请参见ok()
VS 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());
}
Run Code Online (Sandbox Code Playgroud)
在任何模板中:
@if(flash.containsKey("passchange.succces")) {
<div class="alert-message warning">
<strong>Done!</strong> @flash.get("passchange.succces")
</div>
}
Run Code Online (Sandbox Code Playgroud)
(此片段是从Java的计算机数据库示例中复制的,因此您可以在自己的磁盘上进行检查)