表示目的でいくつかのデータを取得するメソッドを持つリクエストスコープ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は広い範囲になりますか?