2013-11-26 4 views
1

Play 스칼라 2.2에 다음 컨트롤러가 정의되어 있습니다.Play 스칼라에서 다른 메서드에서 컨트롤러 메서드 호출

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])

모든 아이디어를 내가 잘못 뭘하는지? 다른 컨트롤러 메서드에서 하나의 컨트롤러 메서드를 호출 할 수 있습니까? 나는 스칼라 앤 플레이에 처음으로 익숙하다.

+3

당신이'데프 defaultList = 목록을 사용해 볼 수 route 파일에 모두 Actions에 대한 경로를 표시해야합니다 또는 당신은 떠날 당신의 ActiondefaultList과 내부 리디렉션 사용할 수 있습니다

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

주())'(행동 없음). 서로에게 두 개의 액션을 중첩시키는 것이 바로 그 직감입니다. 이것이 오류의 원인입니다. 또한 컴파일러에 문제가있는 줄을 알려줄 수 있습니까? –

답변

1

play2의 모든 동작에 함수 (예 : Request => Result)가 포함되어 있으므로 코드를 다시 Action으로 반환하므로 컴파일되지 않으므로이 방법으로 래핑 할 수 없습니다. @Akos Krivachy가 제안한 것처럼 할 수 있습니다. list Action의 호출을 Action이 아닌 함수에 넣은 다음이 함수를 예를 들어 어떤 경로에 바인딩하십시오. 이 경우 defaultList 기능을 바인드 할 경로가 하나만있을 수 있습니다. (DateTime.now 당신이

관련 문제