方法应用缺少参数... Play Framework 2.4编译错误

时间:2015-06-10 15:24:56

标签: scala playframework-2.0

  

编译错误:类newPost中缺少方法的参数;    如果要将其视为部分应用函数,请使用“_”跟随此方法

我不明白模板处理方法必须如何以及编码器对我的要求 https://github.com/flatlizard/blog

控制器:

  def addPost = Action{ implicit request =>
    Ok(views.html.newPost(postForm))
  }

  def createPost = Action { implicit request =>
    postForm.bindFromRequest.fold(
      hasErrors => BadRequest,
      success => {
        Post.create(Post(new Date, success.title, success.content))
        Ok(views.html.archive("my blog", Post.all))
      })
  }

路线:

GET        /archive/new         controllers.Application.addPost
POST       /archive             controllers.Application.createPost

查看:

@(postForm: Form[Post])(content: Html)(implicit messages: Messages)
@import helper._

@form(routes.Application.createPost) {
    @inputDate(postForm("date"))
    @textarea(postForm("title"))
    @textarea(postForm("content"))
    <button id="submit" type="submit" value="Submit" class="btn btn-primary">Submit</button>
}

更新

我解决了在控制器文件中添加以下导入的问题:

import play.api.i18n.Messages.Implicits._
import play.api.Play.current

参见Play 2.4迁移: https://www.playframework.com/documentation/2.4.x/Migration24#I18n

2 个答案:

答案 0 :(得分:3)

编译错误

您的视图需要传递三个参数,但您只传递一个参数。要解决编译错误,请将视图中的签名从@(postForm: Form[Post])(content: Html)(implicit messages: Messages)更改为@(postForm: Form[Post])(implicit messages: Messages)

参数和视图

组合多个视图时,将使用示例(content: Html)中的第二个参数:

<强> index.scala.html

@(text: String)

@main("Fancy title") {
  <div>@text</div>
}

<强> main.scala.html

@(title: String)(content: Html)

<html>
  <head>
    <title>@title</title>
  </head>
  <body>
    @content
  <body>
</html>

在控制器中调用

Ok(views.html.index("Some text"))

在这个例子中,你正在传递&#34;一些文字&#34;索引视图。索引视图然后调用主视图传递另外两个参数。 titlecontent,其中content是index.scala.html(<div>@text</div>)大括号之间的html

最后隐式参数:(implicit messages: Messages)必须位于范围内,才能隐式传递给您的视图。例如,在你的控制器中这样:

def addPost = Action{ implicit request =>
   implicit val messages: Messages = ...
   Ok(views.html.newPost(postForm))
}

答案 1 :(得分:1)

我解决了在控制器文件中添加以下导入的问题:

import play.api.i18n.Messages.Implicits._
import play.api.Play.current

请参阅Play 2.4迁移:https://www.playframework.com/documentation/2.4.x/Migration24#I18n

<强>更新

实际上这是一个不好的方法,因为这里使用的Play.current很快就会被弃用。这里使用依赖注入的另一种解决方案:

路线:

GET        /archive/new         @controllers.Application.addPost
POST       /archive             @controllers.Application.createPost

控制器:

class Application @Inject() (val messagesApi: MessagesApi)
  extends Controller with I18nSupport{
 ...
}

https://www.playframework.com/documentation/2.4.x/ScalaDependencyInjection