2012-12-07 32 views
3

我使用Play 2.0 Framwork剛剛起步。 我不知道做基於ajax的表單提交的最佳方式是什麼。目前,我的頁面包含一個表單和一個下面的列表,其中應顯示(表單的)新條目。我想通過ajax進行提交,還有列表更新。Ajax的表單提交播放框架2.0

但我的第一個問題是,如何通過AJAX提交表單,並使用表單綁定和控制器的驗證。那可能嗎?什麼是正確的方法來做到這一點?

謝謝,

回答

4

最快的方法是jQuery。只需要serialize您的表格,併發送普通jQuery.ajax。作爲迴應,你的方法應該發送一個包含ie的JSON數據。新項目和其他的東西,如自定義狀態等

+0

好了,所以我必須要顯示驗證消息等等都在我自己的?可悲的,但也許我檢票:) – Soccertrash

+2

寵壞了。如果你發送一個帶有普遍POST表單您可以將用戶重定向貝克給表單頁面,如果表格'hasErrors()',然後內置的形式傭工顯示約束和錯誤自動,無論如何,如果你使用AJAX發送它我認爲你應該在發送之前使用jQuery的驗證插件,如果你需要進行服務器端驗證,是的,你需要傳輸錯誤消息作爲迴應,並且用JS顯示它們。 – biesior

+0

是你的小門被寵壞了。我也來自檢票口,所以我知道你的感受。 Wicket ajax表單提交也使用引擎蓋下的JavaScript - 任何返回的反饋消息都會被客戶端的wicket javascript解析並附加到正確的位置。現在你必須手動到這個過程:( – samz

6

恕我直言,你可以使用遊戲中的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); 
     } 
    }); 
} 

這只是簡單的例子(我沒有編譯),但給出了這個概念。