2016-12-31 35 views
0

有人可以給我一個簡單的形式的例子,當給定一個簡單的對象,你可以點擊保存並知道它具有所有需要保存對象的數據(包括id ?)PlayFramework java和那玩〜引導幫手

使用播放found here

(這只是一個佔位符,所以我可以張貼的答案 - 爲什麼沒有人想放棄,在他們的框架工作的例子嘆氣)

回答

0

這是不太明顯?我想 - 我是來自學校,在那裏你隱藏了身份證,在某種隱藏的領域或某些領域。

也許遊戲引導代碼庫有一些很好的做法,但我沒有在文檔中看到它 - 所以在這裏,我的朋友是如何獲取一些對象,爲它做一個表單,然後能夠更新該目標。

爲了簡潔起見,我已經將db代碼留出了。

首先,這是我的操作 - 在我的控制器類中 - 從數據庫獲取我的模型。請注意,我使用的支持模型與數據庫返回一樣,使用私有字段等(所以,您知道,只是一個普通的POJO)。

public Result editLesson(int languageId){ 
    Form<Language> languageForm = formFactory.form(Language.class); 

    try { 
     //here da is just how i get things from the database. 
     Language language = da.getLanguage(languageId); 
     languageForm = languageForm.fill(language); 
    } catch (SQLException e){ //SAD! } 
    return ok(editLesson.render(languageForm)); 
} 

整潔。所以這只是獲取形式,並將其傳遞給某個頁面以供查看。請注意,formFactory需要神奇地注入您的控制器。接下來,該頁面是什麼樣子的?

嗯,這是一個常用的模板,只是:

我有這個作爲我的第一行:@import b3.vertical.fieldConstructor

和我想要的形式展現我有

@b3.form(routes.HomeController.saveLesson) { 
    @b3.hidden("id", languageForm("id").value, 'attr -> false) 
    @b3.text(languageForm("name"), '_label -> "Title", 'placeholder -> "The Title") 
    @b3.text(languageForm("description"), '_label -> "Description", 'placeholder -> "The Description") 
    @b3.submit('class -> "btn btn-default"){ <span class="glyphicon glyphicon-ok"></span> Save } 
} 

好,所以在這裏我們有表單 - 它告訴表單要走哪裏(我們將在5秒內查看路線),並放置可編輯的字段。我將id字段設置爲隱藏在此處。對於我來說,如何訪問它並不直觀 - 但是在那裏。

我的路線文件中有這樣的:

GET  /edit-lesson/:languageId controllers.HomeController.editLesson(languageId: Integer) 
POST /save-lesson/    controllers.HomeController.saveLesson() 

第一行是如何開始編輯頁面。第二行是我想去保存這些編輯的課程的地方。我使用routes.HomeController.saveLesson來反向指向保存課程。如果你的控制器被稱爲Bob(啞名),你應該使用routes.Bob.saveLesson鏈接到saveLesson方法。

最後,我saveLesson代碼如下所示(鮑勃〜呃,HomeController的)

public Result saveLesson(){ 
    Form<Language> languageForm = formFactory.form(Language.class).bindFromRequest(); 

    if (languageForm.hasErrors()){ 
     return badRequest(editLesson.render(languageForm)); 
    } else { 
     Language language = languageForm.get(); 
     try { 
      da.saveLanguage(language); 
      return ok(share.render()); 
     } catch (SQLException e){ 
      //TODO: log this, but really we don't have much to do, do we? 
      return ok(e.getMessage()); 
     } 
    } 
} 

注意數據綁定在遊戲搞砸了 - 如果你的表格有錯誤,通話.get()會失敗,所以如果你的控制器出於某種原因需要一些表單數據,你需要檢查表單是否有錯誤 - 如果沒有,請做任何事情。如果確實是,您需要在表單對象上使用.field(String).value(),您無法將表單對象轉換爲綁定(通過get())〜這在scala頁面上有所不同,但不在java頁面上!