我正在尝试将Play Framework与Ebean一起使用。我有一个非常简单的Java类Subject
:
@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());
}
我只有一个问题。有没有办法从Subject
获取具有正确(原始)ID的subjectForm
实例?对数据库进行额外请求以更新记录似乎不是一个好的解决方案。但是当我从subjectForm
id获取实例时总是为0.
答案 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);