0

我认为我的问题与 BalusC 的回答有关:Evaluation of EL during view build time

我正在尝试使用 JSF2 复合组件显示一系列 Primefaces BarCharts,并将自定义 Chart 对象作为属性传递。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 对象调用了 3 次 getValue(),并且如上面链接中所述,仅存储了 EL 表达式“#{cc.attrs.chart.model}”。这会导致每次 Primefaces 在内部调用 getValue 时都会进行新的模型评估,因此需要对数据库进行三次往返。

有没有办法评估 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 回答