【发布时间】:2013-03-10 00:20:28
【问题描述】:
我一直在玩游戏!到目前为止,学习曲线有一些颠簸。现在我无法将闪存数据从控制器传递到视图,起初我认为这是一项微不足道的任务,或者至少应该如此。
这是我现在拥有的:
我有一个主布局:application.scala.html
我在布局中有一个视图:login.scala.html
我有我的控制器和方法:UX.authenticate() - 我希望它根据登录尝试的结果(成功与失败)向视图提供闪存数据
这是我的控制器方法中的代码:
def authenticate = Action { implicit request =>
val (email, password) = User.login.bindFromRequest.get
// Validation
// -- Make sure nothing is empty
if(email.isEmpty || password.isEmpty) {
flash + ("message" -> "Fields cannot be empty") + ("state" -> "error")
Redirect(routes.UX.login())
}
// -- Make sure email address entered is a service email
val domain = email.split("@")
if(domain(1) != "example.com" || !"""(\w+)@([\w\.]+)""".r.unapplySeq(email).isDefined) {
flash + ("message" -> "You are not permitted to access this service") + ("state" -> "error")
Redirect(routes.UX.login())
} else {
// Attempt login
if(AuthHelper.login(email, password)) {
// Login successful
val user = User.findByEmail(email)
flash + ("message" -> "Login successful") + ("state" -> "success")
Redirect(routes.UX.manager()).withSession(
session + (
"user" -> user.id.toString
)
)
} else {
// Bad login
flash + ("message" -> "Login failed") + ("state" -> "error")
Redirect(routes.UX.login())
}
}
}
在我的登录视图中,我有一个参数:@(implicit flash: Flash)
当我尝试使用 flash 时,使用 @flash.get("message") 没有出现任何内容
理想情况下,我想在布局中设置@(implicit flash: Flash),这样我就可以从任何控制器刷新数据,它会到达我的视图。但是每当我这样做时,登录视图都会引发错误。
在我现在的登录视图中,我有这个:
def login = Action { implicit request =>
flash + ("message" -> "test")
Ok(views.html.ux.login(flash))
}
将闪存数据传递到视图的理想方式是什么,是否有任何示例? Play 中的示例!框架文档没有任何帮助,并且仅限于两个根本不显示与视图交互的示例(在底部找到:http://www.playframework.com/documentation/2.0/ScalaSessionFlash)。
有没有更简单的选择?我究竟做错了什么?如何将 Flash 数据直接传递到我的布局视图?
【问题讨论】:
标签: scala playframework playframework-2.0