0

我想在 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 的工作方式似乎lineChartgraphicImage?

我将如何为 lineChart 获得相同的结果?我能否以某种方式将变量传递给支持 bean,以便 bean 知道要在系列中放入什么值?

我在 Glassfish 3.1.2 上使用 Primefaces 3.5 和 JSF 2.1。

4

1 回答 1

1

从 JSF 2.1 开始,您可以使用 EL 传递对象:

<p:lineChart value="#{carBean.getGraphByCar(car)" ... />

或者,如果您想使用objIdcar 的属性,请使用:

<p:lineChart value="#{carBean.getGraphByCarId(car.objId)" ... />
于 2013-05-03T10:04:33.327 回答