Java 获取运行时异常:数据源用户为null?在Play Framework 2.2.1中更新用户模型时

Java 获取运行时异常:数据源用户为null?在Play Framework 2.2.1中更新用户模型时,java,playframework-2.2,Java,Playframework 2.2,我目前正在尝试增强Play framework网站上的待办事项列表教程。我添加了一个登录表单(当然还有一个充当模型的用户类),它工作得非常好。我还制作了一个小的“仪表板”,登录用户可以在其中更改密码和电子邮件地址。但是当我提交表单时,我得到一个“Datasource user is null?”错误(RuntimeException) 当我想要限制编辑的可能性时,整个问题就出现了(我首先使用了一个完整的用户表单,它非常过分(用户不需要编辑他们的ID)。因此我在我的应用程序文件中创建了一个名为Up

我目前正在尝试增强Play framework网站上的待办事项列表教程。我添加了一个登录表单(当然还有一个充当模型的用户类),它工作得非常好。我还制作了一个小的“仪表板”,登录用户可以在其中更改密码和电子邮件地址。但是当我提交表单时,我得到一个“Datasource user is null?”错误(RuntimeException)

当我想要限制编辑的可能性时,整个问题就出现了(我首先使用了一个完整的用户表单,它非常过分(用户不需要编辑他们的ID)。因此我在我的应用程序文件中创建了一个名为UpdateUser的小内部类,它收集了所需的信息,就像我在登录系统中所做的那样

搜索这个错误给了我很多结果,但是人们通过取消对conf文件中的ebean.default行的注释(我已经这样做了),看到他们的问题得到了解决

以下是我用来更新用户信息的方法:

首先,我在我的应用程序中创建了一个小类来保存表单(就像我在登录时做的那样)。 然后,我在我的用户类中创建了一个更新函数:

public static String update(String id, User newuser) {
    newuser.update(id);
    return("Your profile has been updated");    
}
它返回将出现在flash中的字符串,根据我的编译器,它是问题函数

在我的应用程序中调用此函数的方式如下:

public static Result updateUser(String id)
{
    Form<UpdateUser> filledForm = updateUserForm.bindFromRequest();
    System.out.println("Updated User : "+filledForm.get().id);
    if(filledForm.hasErrors())
        {
            flash("success","Error while updating");
    }else{
        User user = new User(filledForm.get().id, filledForm.get().email, User.find.byId(filledForm.get().id).name, User.find.byId(filledForm.get().id).surname, filledForm.get().password);
        flash("success", User.update(id,user));
    }
    return redirect(routes.Application.dashboard());
}
公共静态结果更新器(字符串id)
{
Form Filled Form=updateUserForm.bindFromRequest();
System.out.println(“更新用户:“+filledForm.get().id”);
if(filledForm.hasErrors())
{
闪存(“成功”、“更新时出错”);
}否则{
User User=new User(filledForm.get().id,filledForm.get().email,User.find.byId(filledForm.get().id),name,User.find.byId(filledForm.get().id),姓氏,filledForm.get().password);
flash(“成功”,User.update(id,User));
}
返回重定向(routes.Application.dashboard());
}
我跟踪了表单中的数据,它不是空的(我的意思是我可以从表单中获取所有信息)。但我想知道是否必须创建另一个ebean,或者是我的函数出错了。我还想知道是不是我的用户创建失败了。或者我应该使用updateUser函数并将其放入我的内部updateUser类中

我不得不承认,我昨天一整天都在做这件事(可能今天也一样),除了ebean.default这个东西,我在互联网上找不到任何东西

------编辑

我继续搜索,下面是我尝试的:

1) 将表单结果放入UpdateUser实例以便使用它
2) 使用此实例,而不是从表单中获取数据

但它也失败了。真正奇怪的是,我为User类添加了一个toString()方法,并在我想插入的用户上调用它(作为更新),从而提供了完整的内容。我想这一定是配置问题,但我看不出来

另一件事:当我来到错误页面,并且当我试图通过修改URL返回应用程序时,我断开了连接。是我的埃宾把自己关起来的吗


今天的最后一次编辑,我已经厌倦了。我试图延迟操作(即在用户注销后进行操作),新数据已正确保存,但调用更新功能时仍然出现错误。

好的,我终于找到了,但完全是偶然的

我只需要写下这句话:

public static String update(String id, User user) {
    user.update((Object)id);
    return ("Your profile has been updated");
}
因为我不太明白的原因,id字符串需要转换为Object。代码的其余部分是正确的。但是很明显,在这个特殊情况下使用update()时(是因为我的id是字符串,还是因为我在将它用作模型之前从另一个类获取了信息),应该是字符串的参数(即使在文档中)必须强制转换


就这样。

您可以通过以下方式改进您的问题: