编译错误:类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
答案 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;索引视图。索引视图然后调用主视图传递另外两个参数。 title
和content
,其中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