动作创建节目表单:
def create = Action {
Ok(html.post.create(postForm))
}
如何修改此操作,以便对于GET请求,它将提供表单,对于POST请求,它将处理用户输入数据,就好像它是一个单独的操作:
def newPost = Action { implicit request =>
postForm.bindFromRequest.fold(
errors => BadRequest(views.html.index(Posts.all(), errors)),
label => {
Posts.create(label)
Redirect(routes.Application.posts)
}
)
}
我的意思是我想结合这两个动作。
UPDATE1:我想要一个提供GET和POST请求的Action
答案 0 :(得分:4)
建议不要合并这两个操作,而是修改路由以获得您期望的行为。例如:
GET /create controllers.Posts.create
POST /create controllers.Posts.newPost
如果您有多种资源(例如帖子和评论),只需添加即可 消除歧义的路径的前缀:
GET /post/create controllers.Posts.create
POST /post/create controllers.Posts.newPost
GET /comment/create controllers.Comments.create
POST /comment/create controllers.Comments.newComment
答案 1 :(得分:1)
我曾尝试过一次类似的事情,但我意识到我并没有使用像它本意使用的框架。使用单独的GET和POST方法,如@paradigmatic显示,在你指定"If we take adding comments to another action, we wouldn't be able to get infomation on post and comments in case an error occured (avoding copy-paste code)."
的情况下 - 只需在控制器方法的末尾用您喜欢的视图渲染页面?对于错误等,您也可以使用闪存范围吗? http://www.playframework.org/documentation/2.0.2/ScalaSessionFlash
您还可以使用两个或更多bean呈现此表单页面并将其发送到控制器端以捕获相关的错误消息和数据。?