1

ページの特定の部分に対して reRender アクションを実行している場合。ページの表示は問題ありませんが、特定の部分を表示するために、残りのページ アクションが 2 回呼び出され、それらの BackingBeans 内のクエリが実行されます (ページの一部を表示するために、すべてのクエリが 2 回実行されることを意味します)。これにより、アプリケーションのパフォーマンスが低下しています。reRender を使用してパフォーマンスを向上させる方法と、クエリの実行回数を減らす方法について何かヘルプはありますか?

4

4 に答える 4

1

JSF getter メソッドは、1 回だけ呼び出されるとは限りません。これを回避するには、コンストラクターから呼び出されたメソッドでクエリを実行する必要があります。

public class Test {
    private String value;

    public Test() {
       this.doQuery();
    }

    private void doQuery() {
       //do query
       this.value = "query result";
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }
}
于 2009-09-04T14:02:58.820 に答える
0

あなたのコードはゲッターにありますか?JSFは、ゲッターが1回だけ呼び出されることを保証しないため、高価なコードをゲッターに入れないようにする必要があります。

于 2009-08-29T07:28:18.777 に答える
0

これは既知のバグです。必要に応じてフォームからカスタムブール値 (queryData と呼びましょう) を設定して、明示的に必要な場合にのみデータをクエリすることを除いて、回避策はありません。

ジャバ:

    public String getValue() {
    if (queryData) {
        return doQuery();
    } else {
        return cachedValue;
    }
}

xhtml:

<h:form onsubmit="this.firstChild.value=true;">
<h:inputHidden id="queryData" value="#{backing.queryData}"/>
于 2009-12-14T13:16:44.143 に答える
0

Seam ページのアクションはありますか? これらは、すべての Ajax リクエストで (面倒なことに) 呼び出されます。

于 2009-09-03T23:57:40.193 に答える