1

表示目的でいくつかのデータを取得するメソッドを持つリクエストスコープBeanがあります。
このメソッドには複数のパラメーターがあるため、同じビューでもさまざまな機会に呼び出すことができます。

JSF:

<ui:repeat value="#{bean.data('foo')}"/>
<ui:repeat value="#{bean.data('bar')}"/>

豆:

public Object[] doSomething(Object arg)
{
    Object[] data = //hit database or remote server to retrieve data;
    return data;
}

これは問題なく機能しますが、jsfライフサイクルフェーズのため、メソッドはそれぞれに対して複数回呼び出されます。#{bean.data(obj)}

の使用ごとに1回だけデータベースにアクセスしたい#{bean.data(obj)}

動作していない次のコードを使用して遅延読み込みを試しました。jsfページにデータが表示されなくなりました。

private Object[] data;

public Object[] doSomething(Object arg)
{
    if (this.data == null)
        this.data = //hit database or remote server to retrieve data;
    return this.data;
}

異なるパラメーターを使用するビューでメソッドが複数回呼び出されるため、viewscopeは広い範囲になりますか?

4

1 に答える 1

2

でそれを手に入れてMapください。

private Map<Object, Object[]> datas = new HashMap<Object, Object[]>();

public Object[] getData(Object arg) {
    Object[] data = datas.get(arg);

    if (data == null) {
        data = //hit database or remote server to retrieve data;
        datas.put(arg, data);
    }

    return data;
}
于 2012-10-07T00:41:58.117 に答える