在Play Scala中从另一个方法调用控制器方法

时间:2013-11-26 01:52:47

标签: scala playframework-2.0

我在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非常陌生。

1 个答案:

答案 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的路由