0

私の問題は、ここでの BalusC の回答に関連していると思います:ビューのビルド時間中の EL の評価

カスタム Chart オブジェクトを属性として渡して、JSF2 複合コンポーネントを使用して一連の Primefaces BarCharts を表示しようとしています。Chart オブジェクトには、チャート名、タイトル、およびデータ モデルを取得するための DAO オブジェクトへの呼び出しが含まれています。これが私の複合コンポーネントです。

<composite:interface>
    <composite:attribute name="chart" />
</composite:interface>
<composite:implementation>
    <p:barChart id="#{cc.attrs.chart.name}" title="#{cc.attrs.chart.title}" value="#{cc.attrs.chart.model}" 
            style="width:300px" legendPosition="ne" xaxisAngle="45"/>
</composite:implementation>    

Primefaces が barchart オブジェクトをレンダリングすると、barchart オブジェクトに対して getValue() を 3 回呼び出します。上記のリンクで説明したように、EL 式「#{cc.attrs.chart.model}」のみが格納されています。これにより、getValue が Primefaces によって内部的に呼び出されるたびに新しいモデルが評価されるため、データベースへの 3 回の往復が発生します。

cc.attrs.chart.model を一度評価してチャートの値属性として使用する方法はありますか?

チャート UI コンポーネントとバインディングを使用できると思いますが、自分のビューでできるだけ多くのチャート プロパティを定義したかったので、これは間違っていると思いますか?

4

1 に答える 1

0

遅延読み込みを使用しないのはなぜですか?

お気に入り:

public Object getValue() {
  if(this.value == null) {
    // do value loading here   
  }
  return this.value;
}
于 2013-11-05T09:16:04.850 に答える