0
我将实现一个关于登录验证的简单方法。验证是POST路线为什么scala方法在逐行序列中不起作用?
def validate: play.api.mvc.Action[play.api.mvc.AnyContent] = Action {
implicit request ⇒
var isSuccess: Some[Boolean] = Some(false)
val data = login_Form.bindFromRequest().get
models.user.validate(data.name, data.psd).map(ccc =>
if (ccc) {
Logger.info("1.1")
isSuccess = Some(true)
} else {
Logger.info("1.2")
isSuccess = Some(false)
}
)
if (isSuccess.get) {
Logger.info("2.1")
Ok(views.html.index.render())
} else {
Logger.info("2.2")
Ok(views.html.login("Login failed"));
}
}
models.user.validate返回Future(布尔),但它没有让我的想法成真。日志只是打印2.2,然后无法登录。我不知道我的问题是什么。我在Play2.4,Scala 2.11.7,sbt 0.13.8中执行此操作,然后在类型安全激活器中运行该应用程序。
,重写没有工作。告诉我一个例外:[type mismatch;发现:scala.concurrent.Future [play.api.mvc.Result] required:play.api.mvc.Result] in okay – jenkin
你使用Action.async吗?该方法不再返回Result,它现在返回一个Future [Result](这将在“validate”完成后解析)。 – Thilo
你需要像AsyncAction这样的东西,并且尽量不要使用Await,只是链接未来并执行转换,关于Future的更多信息请参见http://docs.scala-lang.org/overviews/core/futures.html – Qingwei