0

'Group'エンティティのリストをレンダリングするページを表示したいので、私のページ(xhtml)にはこれが含まれています

<f:event type="preRenderView" listener="#{groupController.loadGroups}" />

これはページが読み込まれたときに呼び出され、昨日は期待どおりにリストを返していました。メソッドは次のようになります

public void loadGroups() {
    allGroups = groupDao.findAll();
}

次に、新しいグループを保存するためのフォームを(同じページに)追加しました。そのフォームを保存すると、次のメソッドが呼び出されます。

public String save() {
    groupDao.create(group);
    return "/admin/groups?faces-redirect=true";
}

グループがデータベースに保存されていることを確認しました。しかし、「return」ステートメントが、「preRenderView」メソッドなどを呼び出して、ページを初めて入力するかのようにページをリロードすることを期待していました。

ページに戻ると、そのメソッドを呼び出しますが、データリストを使用して、返されたグループのコレクションを表示し、それが

public Collection<Group> getAllGroups() {
    return allGroups;
}

...'allGroups'変数はnullにリセットされました。

私は2、3か月間JSFに触れていません。以前はこれらすべてを理解していたと思いますが、明らかに理解していません。誰かが私が間違っていることの手がかりを私に与えることができますか?

答えが見つかったら(今すぐ本を掘り出します)、更新を投稿します。でもありがとう。

更新:明確にするために、loadGroupsメソッドはpreRenderViewイベントであるため、getAllGroupsメソッドのに実行されると思いました。しかし、それらは間違った方法で実行されているようです(loadGroups()がコレクションにデータを入力する前に、getAllGroupsが最初に呼び出されます)。ちなみに、これはViewScopedBeanです。

4

1 に答える 1

0

元のバージョンが機能しない理由はわかりませんが、ページの preRenderView ステートメントを削除し、loadGroups メソッドに @PostConstruct アノテーションを追加すると、正常に機能します。@PostConstruct メソッドが機能する理由は理解していますが、preRenderView が機能しない理由はわかりません。とにかく、私がそれを行うとうまくいきます...

于 2012-09-04T22:21:00.817 に答える