0
我正在嘗試在Ebean中使用Play框架。我有相當簡單的Java類Subject
:Play + 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
似乎沒有隱藏輸入字段的幫助。那麼,我可以編寫沒有任何助手的表單代碼來減小HTML代碼的大小?對?我需要做的就是設置正確的'name'和'id'標籤。感謝你的回答。 – gooamoko
幫手只允許你生成HTML標籤,無論如何你也可以自己做(如你所見),並且在表單元素「name」屬性中是的是最重要的,如果你不使用它,它不會通過瀏覽器發送 – biesior
我可以再問你一個問題嗎?爲什麼我應該設置'subjectFromForm.id'參數?獲取對象的id值是不夠的? – gooamoko