我使用Play 2.0 Framwork剛剛起步。 我不知道做基於ajax的表單提交的最佳方式是什麼。目前,我的頁面包含一個表單和一個下面的列表,其中應顯示(表單的)新條目。我想通過ajax進行提交,還有列表更新。Ajax的表單提交播放框架2.0
但我的第一個問題是,如何通過AJAX提交表單,並使用表單綁定和控制器的驗證。那可能嗎?什麼是正確的方法來做到這一點?
謝謝,
我使用Play 2.0 Framwork剛剛起步。 我不知道做基於ajax的表單提交的最佳方式是什麼。目前,我的頁面包含一個表單和一個下面的列表,其中應顯示(表單的)新條目。我想通過ajax進行提交,還有列表更新。Ajax的表單提交播放框架2.0
但我的第一個問題是,如何通過AJAX提交表單,並使用表單綁定和控制器的驗證。那可能嗎?什麼是正確的方法來做到這一點?
謝謝,
最快的方法是jQuery。只需要serialize您的表格,併發送普通jQuery.ajax。作爲迴應,你的方法應該發送一個包含ie的JSON數據。新項目和其他的東西,如自定義狀態等
恕我直言,你可以使用遊戲中的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);
}
});
}
這只是簡單的例子(我沒有編譯),但給出了這個概念。
好了,所以我必須要顯示驗證消息等等都在我自己的?可悲的,但也許我檢票:) – Soccertrash
寵壞了。如果你發送一個帶有普遍POST表單您可以將用戶重定向貝克給表單頁面,如果表格'hasErrors()',然後內置的形式傭工顯示約束和錯誤自動,無論如何,如果你使用AJAX發送它我認爲你應該在發送之前使用jQuery的驗證插件,如果你需要進行服務器端驗證,是的,你需要傳輸錯誤消息作爲迴應,並且用JS顯示它們。 – biesior
是你的小門被寵壞了。我也來自檢票口,所以我知道你的感受。 Wicket ajax表單提交也使用引擎蓋下的JavaScript - 任何返回的反饋消息都會被客戶端的wicket javascript解析並附加到正確的位置。現在你必須手動到這個過程:( – samz