1

动作创建显示形式:

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 请求的操作

4

2 回答 2

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
于 2012-08-12T09:49:26.297 回答
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 呈现此表单页面并将它们发送到控制器端以捕获相关的错误消息和数据。?

于 2012-08-12T11:14:42.263 回答