我认为我的问题与 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 组件和绑定,但我希望在我的视图中定义尽可能多的图表属性,所以这感觉不对?