Play framework 2 update() 方法在我的项目中表现得很奇怪。
我的项目有以下模型类:
@entity
public class Images{
@Id
public Long id;
@Lob
public byte[] imageFile;
}
@entity
public class Users {
@Id
public Long id;
public String name;
public Blobs photo;
}
这是 index.scala.html:
@(user : Users)
<p>@user.id</p>
<p>@user.name</p>
<p>@user.photo.id</p>
<a href="@routes.Application.editUser(1L)">edit user no. 1</a>
这是我的 editUser.scala.html 中的代码:
@(id : Long, userForm : Form[Users])
@form(action = routes.Application.update(id))
@inputText(userForm("name"))
@inputText(userForm("photo.id"))
<input type="submit" value="UPDATE">
这是我的控制器类:
public class Application extends Controller {
public static Result index() {
return ok(index.render(Users.find.byId(1L)));
}
public static Result editUser(Long id) {
Form<Users> userForm = form(Users.class).fill(Users.find.byId(id));
return ok(
views.html.editUser.render(id, userForm)
);
}
public static Result update(Long id) {
Form<Users> userForm = form(Users.class).bindFromRequest();
userForm.get().update(id);
return redirect((routes.Application.index()));
}
}
假设 Blobs 类中有一个 id=1 的条目和一个 blob,并且 Users 类中也有一个 id=1 的条目。现在我想更新该用户并从 Blobs 表中设置照片 ID。
问题是当我尝试从 editUser 表单更新用户并返回 index.scala.html 时,我得到一个空指针异常。似乎 update() 方法只是为用户表单中的照片字段返回 null,尽管更新用户的名称值没有问题。我检查了 userForm.field("photo").value() ,似乎 bindFromRequest 工作正常。但更新后,该photo
字段为空。有谁知道是什么问题?
编辑: PS:该程序将以空指针异常开始,因为用户的照片字段在程序开始时为空。假设我们直接进入编辑页面并尝试Users
使用photo
来自 Blob 的更新。问题是即使在更新之后,我也得到空指针异常,并且似乎更新不会影响User
类中的该字段