0

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类中的该字段

4

0 回答 0