2

我今天开始学习 Play 框架,它非常好并且容易学习。

我成功完成了他们网站上提供的示例,但我想对其进行一些修改。

我想看看是否可以更新特定任务的标签,所以我遵循了以下方法

首先,我添加了一条更新数据的路线

POST    /tasks/:id/update           controllers.Application.updateTask(id: Long)

然后我将以下代码添加到index.scala.html文件中

 @form(routes.Application.updateTask(task.id)) {
                    <label class="contactLabel">Update note here:</label> 
 @inputText(taskForm("label")) <br />
                }

然后我将 Application.java 类修改为

public static Result updateTask(Long id) {
        Form<Task> taskForm = Form.form(Task.class).bindFromRequest();
        if (taskForm.hasErrors()) {
            return badRequest(views.html.index.render(Task.all(), taskForm));
        } else {
            Task.update(id, taskForm.get());
            return redirect(routes.Application.tasks());
        }
    }

最后在 Task.java 我添加了这段代码

public static void update(Long id, Task task) {
        find.ref(id).update(task.label);
    }

但是当我执行更新操作时,我得到了这个错误

[RuntimeException: DataSource 用户为空?]

不用说我注释掉了

 db.default.driver=org.h2.Driver
 db.default.url="jdbc:h2:mem:play"
 ebean.default="models.*"

在 application.conf 中,因为我已经能够保存和删除数据;但是我无法更新数据库中的数据,为什么会发生这种情况,以前有人尝试过这个,我该如何解决这个错误?

4

2 回答 2

1

update(Long id, Task task)Task模型上的方法应如下所示:

public static void update(Long id, Task task) {
    task.update(id); // updates this entity, by specifying the entity ID
}

因为您将task变量作为更新数据传递,所以您不需要Task像在find.ref(id). 此外,类update()上的方法play.db.ebean.Model(只有一个参数)需要模型的 ID 作为参数。

希望这有助于解决您的问题.. :)

于 2013-04-21T01:34:46.107 回答
0

确保您已在 application.conf 中注释掉 Ebean 配置

# Ebean configuration
# ~~~~~
# You can declare as many Ebean servers as you want.
# By convention, the default server is named `default`
#
ebean.default="models.*"
于 2015-05-04T18:48:22.943 回答