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 ユーザーが null ですか?]

コメントアウトしたのは言うまでもありません

 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の参照を探す必要はありません。さらに、クラスのメソッド(1 つのパラメーターを持つ) は、モデルの ID をパラメーターとして必要とします。Taskfind.ref(id)update()play.db.ebean.Model

これがあなたの問題の解決に役立つことを願っています.. :)

于 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 に答える