我想在 DataTable 中使用 LineChart。在每个“行”上,我想要一个不同的 LineChart。在我使用 GraphicImage 标记连接到 jFreeChart 并使用以下代码段传递我想要绘制的对象的 objId 之前(其中 car 是来自 SessionScoped 支持 bean 的汽车数组的我的 DataTable 变量):
<p:graphicImage value="#{carBean.graphById}">
<f:param name="objId" value="#{car.objId}" />
</p:graphicImage>
然后通过检查请求参数映射在支持 bean 中检索 objId:
FacesContext context = FacesContext.getCurrentInstance();
String objId = context.getExternalContext().getRequestParameterMap().get("objId");
这一切都很好。但是现在我想使用更时髦的 PrimeFaces 图表,所以我认为使用以下代码替换它应该很容易:
<p:lineChart value="#{carBean.graphById" title="Linear Chart" style="width:400px;" widgetVar="chart" >
<f:param name="objId" value="#{car.objId}" />
</p:lineChart>
支持 bean 方法当然返回 aCartesianChartModel
而不是StreamedContent
. 现在的问题是context.getExternalContext().getRequestParameterMap().get("objId")
返回 null 而不是像以前那样返回实际的 id。f:params 的工作方式似乎lineChart
与graphicImage
?
我将如何为 lineChart 获得相同的结果?我能否以某种方式将变量传递给支持 bean,以便 bean 知道要在系列中放入什么值?
我在 Glassfish 3.1.2 上使用 Primefaces 3.5 和 JSF 2.1。