我在Play Scala 2.2中定义了以下控制器。
object Blog extends Controller {
val postForm = Form(
mapping(
"title" -> nonEmptyText,
"content" -> nonEmptyText
)(Post.apply)(Post.unapply)
)
def defaultList = Action {
list(DateTime.now())
}
def list(date: DateTime) = Action {
Ok(views.html.posts(Posts.all(), postForm))
}
}
我在编译时遇到以下错误:
Overloaded method value [apply] cannot be applied to (play.api.mvc.Action[play.api.mvc.AnyContent])
任何想法我做错了什么?我可以从另一个调用一个控制器方法吗?我对Scala和Play非常陌生。
答案 0 :(得分:1)
你不能以这种方式包装,因为play2中的任何动作都需要一个函数:Request => Result
所以从请求到结果,在你的代码中你返回另一个Action
,所以它不会编译。您可以像@Akos Krivachy建议的那样,将list Action
的调用放在函数内而不是Action中,然后将此函数绑定到某个路径上。在这种情况下,您可能只有一条路由来绑定defaultList
函数。或者,您可以将defaultList
保留为Action
,并在内部使用重定向:
def defaultList = Action {
Redirect(routes.Application.list(DateTime.now()))
}
注意:您需要在Actions
文件
route
的路由