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()方法只是在Users表单中为photo字段返回null,尽管更新用户的名称值没有问题。我检查了userForm.field(“photo”)。value(),似乎bindFromRequest正常工作。但更新后,photo
字段仅为空。有谁知道问题可能是什么?
编辑:
P.S:该程序将以空指针异常开始,因为在程序开始时Users的照片字段为空。假设我们直接转到修改页面,然后尝试使用Blob中的Users
更新photo
。问题是即使在更新之后,我得到空指针异常,似乎更新不会影响User
类