Playframework Ajax表单提交播放框架2.0

Playframework Ajax表单提交播放框架2.0,playframework,playframework-2.0,Playframework,Playframework 2.0,我刚刚开始使用Play 2.0框架。 我想知道基于ajax的表单提交的最佳方式是什么。目前,我的页面包含一个表单和下面的列表,其中应显示(表单的)新条目。我想用ajax提交,同时更新列表 但我的第一个问题是如何通过ajax提交表单,并使用表单绑定和控制器验证。可能吗?正确的方法是什么 谢谢,最快的方法是jQuery。只需将您的表格与common一起发送即可。作为响应,您的方法应该发送一个JSON数据,其中包含新项目和其他内容,如自定义状态等。IMHO您可以使用play的JavaScript路由功

我刚刚开始使用Play 2.0框架。 我想知道基于ajax的表单提交的最佳方式是什么。目前,我的页面包含一个表单和下面的列表,其中应显示(表单的)新条目。我想用ajax提交,同时更新列表

但我的第一个问题是如何通过ajax提交表单,并使用表单绑定和控制器验证。可能吗?正确的方法是什么


谢谢,

最快的方法是jQuery。只需将您的表格与common一起发送即可。作为响应,您的方法应该发送一个JSON数据,其中包含新项目和其他内容,如自定义状态等。

IMHO您可以使用play的JavaScript路由功能、js验证(例如jquery validator插件)和服务器端验证。首先声明将用作域对象的case类

case class SimpleUser( name: String, email: String )
然后使用表单和函数创建控制器:

object Users extends Controller{
    //validation 1 goes here
    val userForm = Form(
        mapping(
            "name" -> text,
            "email" -> email
        )(SimpleUser.apply)(SimpleUser.unapply)
    )

    def save = Action { implicit request =>
        userForm.bindFromRequest().fold(
            formWithErrors => {
                BadRequest( "uuuups" ) 
            },
            user => {
                //validation 2 goes here
                Ok( "ok" )
            }
        )
    }
}
完成此操作后,您可以将条目添加到路由文件中

POST    /users/save controllers.Users.save
GET     /jsroutes   controllers.Application.javascriptRoutes
和应用程序控制器

def javascriptRoutes = Action { implicit request =>
    import routes.javascript._
    Ok(
        Routes.javascriptRouter("jsRoutes")(
            Users.save
    ) ).as("text/javascript")
}
现在是JavaScript部分

(...)
save: function(){
    jsRoutes.controllers.Users.save().ajax( {
        data: jQuery( 'form' ).serialize(),
        success: function( data ){
            //refresh users' list
        },
        error: function( data ){
            console.log( data.responseText );
        }
    });
}

这只是一个简单的示例(我没有编译它),但展示了这个想法。

好的,所以我必须自己显示验证消息等等?很遗憾,但可能我被Wicket宠坏了:)如果你用common POST发送表单,如果表单
hasErrors()
,你可以将用户beck重定向到表单页面,然后内置表单帮助程序自动显示约束和错误,无论如何,如果您使用AJAX发送,我认为您应该在发送之前使用jQuery的验证插件,如果您需要进行服务器端验证,是的,您需要传输错误消息作为响应,并使用JS.yup显示它们。您被wicket破坏了。我也来自wicket,所以我知道你的感受。Wicket ajax表单提交也在幕后使用javascript——任何返回的反馈消息都将由客户端Wicket javascript解析并附加到正确的位置。现在,您必须手动执行此过程:(