我目前正在尝试从Play框架的网站上增强“待办事项列表”教程。我添加了一个登录表单(当然还有一个User类作为模型),它运行得非常好。我还制作了一个小的“仪表板”,记录的用户可以在其中更改密码和电子邮件地址。但是当我提交表单时,我得到一个“数据源用户是否为空?”错误(RuntimeException)。
当我想限制版本的可能性时,我遇到了整个问题(我首先使用了一个完整的用户表单,这个表单已经超过了顶部(用户不需要编辑他们的ID)。所以我在我的内部编写了一个小内部类名为UpdateUser的应用程序文件,它收集所需的信息,就像我为登录系统所做的那样。
搜索此错误给了我很多结果,但人们通过取消注释conf文件中的ebean.default行来解决问题,我已经这样做了。
以下是我用来更新用户信息的方法:
首先,我在我的应用程序中创建了一个小类来保存表单(就像我登录的那样)。 然后我在我的用户类中找到了here的更新函数:
public static String update(String id, User newuser) {
newuser.update(id);
return("Your profile has been updated");
}
返回将在我的flash中的String,根据我的编译器,它是问题函数。
在我的应用程序中调用此函数,如下所示:
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());
}
我跟踪了Form中的数据并且它不是null(我的意思是我可以从表单中获取所有内容)。但我想知道我是否必须创建另一个ebean或者我的功能是否错误。我也想知道我的用户创建是否失败。或者我可能应该使用updateUser函数并将其放在我的内部UpdateUser类中?
我必须承认我昨天(也可能是今天)的所有工作都是这样,除了ebean.default外,我在互联网上找不到任何东西。
------ EDIT
我继续搜索,所以这就是我的尝试:
1)将表单结果导入UpdateUser的实例以便使用它 2)使用此实例而不是从表单
获取数据但它也失败了。真正奇怪的是,我为User类添加了一个toString()方法,并在我想要插入的用户(作为更新)上调用它给了我完整的东西。我认为它一定是配置问题,但我看不到它。
另一件事:当我来到错误页面并且当我尝试通过修改URL返回应用程序时,我断开连接。关闭自己是我的ebean吗?
当天的最后一次编辑,我已经厌倦了这一点。我试图延迟操作(即在用户注销后使其发生),新数据被正确保存但我仍然在调用更新函数时收到错误。
答案 0 :(得分:0)
好吧,我终于找到了它,但完全是偶然的。
我只需写下这个:
public static String update(String id, User user) {
user.update((Object)id);
return ("Your profile has been updated");
}
因为某些原因我不太懂,所以需要将id String强制转换为Object。其余的代码是正确的。但显然,当在这个特殊情况下使用update()时(因为我的id是一个String或因为我在使用它作为我的模型之前从另一个类获取信息),该参数应该是一个String(即使在文件)有待演员。
就是这样。