在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)
在这两种情况下我都得到“错误:类恢复中的方法渲染不能应用于给定类型;”
解决方法
从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的动作返回结果,参见ok()vs badRequest():forrbiden(),notFound()等等
您还可以使用flash scope填充邮件,并在密码更改成功后使用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的计算机数据库示例中复制的,因此您可以在自己的磁盘上进行检查)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。