【问题标题】:In Play Scala Call a controller method from another method在 Play Scala 中从另一个方法调用控制器方法
【发布时间】:2013-11-26 18:38:33
【问题描述】:

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

【问题讨论】:

  • 你可以试试def defaultList = list(DateTime.now())(没有操作)。您将两个动作嵌套在一起只是一种预感,这就是导致错误的原因。您也可以指出编译器有问题的那一行吗?

标签: scala playframework-2.0


【解决方案1】:

您不能以这种方式包装,因为 play2 中的任何操作都需要一个函数:Request => Result 所以从请求到结果,并且在您的代码中您返回另一个 Action,因此它不会编译。您可以像@Akos Krivachy 建议的那样做,将您对list Action 的调用放在一个函数而不是Action 中,然后将此函数绑定到某个路由。在这种情况下,您可能只有一个路由来绑定您的 defaultList 函数。或者您可以将defaultList 保留为Action 并在内部使用重定向:

def defaultList = Action {
        Redirect(routes.Application.list(DateTime.now()))
    }

注意:您需要在route 文件中为Actions 指明路由

【讨论】:

    猜你喜欢
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    相关资源
    最近更新 更多