Ajax表单提交Play Framework 2.0

时间:2012-12-07 14:35:50

标签: playframework playframework-2.0

我刚刚开始使用Play 2.0 Framwork。 我想知道基于ajax的表单提交的最佳方法是什么。目前,我的页面包含下面的表单和列表,其中应显示新条目(表单)。我想通过ajax和列表更新来完成提交。

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

谢谢,

2 个答案:

答案 0 :(得分:6)

恕我直言,你可以使用play的JavaScript路由功能,js验证(例如jquery验证器插件)和服务器端验证。首先声明将用作域对象的案例类

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 );
        }
    });
}

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

答案 1 :(得分:4)

最快的方法是jQuery。只需要serialize您的表单,然后使用常见jQuery.ajax发送。作为响应,您的方法应该发送包含ie的JSON数据。新项目和其他东西,如自定义状态等。