2014-05-06 39 views
0

我正在嘗試在Ebean中使用Play框架。我有相當簡單的Java類SubjectPlay + Ebean如何在編輯記錄時保留主鍵?

@Entity 
public class Subject extends Model { 

    private static final long serialVersionUID = 1L; 

    @Id 
    public final int id; 
    public String name; 

    public Subject() { 
     id = 0; 
    } 

    public Subject(int id, String name) { 
     this.id = id; 
     this.name = name; 
    } 
} 

而且我也有簡單的編輯形式(views.subjects.edit.scala.html):

@(subjectForm: Form[models.entities.Subject], id: Int) 
@import helper._ 
@main("Subject") { 
@helper.form(action = routes.Subjects.save(id)) { 
@helper.inputText(subjectForm("name"),'_label -> "Name") 
<input type="submit" class="form-submit" value="Save"> 
<a class="button" href="@routes.Subjects.index()">Cancel</a> 
} 
} 

id是不可編輯的(它的主鍵),這就是爲什麼我不喜歡在表單輸入元素中顯示它。所以,當我保存編輯Subject,我需要做的是這樣

public static Result save(int id) { 
    Form<Subject> form = subjectForm.bindFromRequest(); 
    if (form.hasErrors()) { 
     flash("error", DATA_ERROR); 
     return badRequest(edit.render(form, id)); 
    } 
    Subject subject = form.get(); 
    if (id == 0) { 
     // Add new record case 
     subject.save(); 
    } else { 
     // Edit existing record case 
     Subject old = Subject.find.byId(id); 
     if (old == null) { 
      return notFound(NOT_FOUND); 
     } 
     old.setName(subject.getName()); 
     old.save(); 
     flash("success", 
       String.format("Subject %s, %d saved", 
         old.getName(), old.getId())); 
    } 
    return redirect(routes.Subjects.index()); 
} 

我只有一個問題。有沒有任何方法可以從subjectForm獲得Subject實例的正確(原始)ID?提出額外的數據庫請求更新記錄似乎不是一個好的解決方案。但是,當我從subjectForm ID流汗實例始終爲0

回答

1

如果你不想顯示它使用hidden場形式:

<input type="hidden" name="id" value='@subjectForm("id").value' /> 

BTW:正在獲取對象和更新它是自然的方式這樣做,或者你可以使用Ebean的SqlUpdate直接查詢like in these samples

編輯:如果你會通過隱藏的ID,你也可以嘗試保存對象在較短的版本,如:

Subject subjectFromForm = subjectForm.bindFromRequest().get(); 
subjectFromForm.update(subjectFromForm.id); 
+0

似乎沒有隱藏輸入字段的幫助。那麼,我可以編寫沒有任何助手的表單代碼來減小HTML代碼的大小?對?我需要做的就是設置正確的'name'和'id'標籤。感謝你的回答。 – gooamoko

+0

幫手只允許你生成HTML標籤,無論如何你也可以自己做(如你所見),並且在表單元素「name」屬性中是的是最重要的,如果你不使用它,它不會通過瀏覽器發送 – biesior

+0

我可以再問你一個問題嗎?爲什麼我應該設置'subjectFromForm.id'參數?獲取對象的id值是不夠的? – gooamoko