2013-05-03 53 views
0

我想在DataTable中使用LineChart。在每個'行'我想要一個不同的LineChart。之前我已經使用了graphicImage的標籤連接到的JFreeChart並傳遞我想通過使用下面的代碼片段(其中車是我從SessionScoped支持bean的車陣數據表變量)來繪製對象的OBJID:在DataTable中使用Primefaces圖表

<p:graphicImage value="#{carBean.graphById}"> 
    <f:param name="objId" value="#{car.objId}" /> 
</p:graphicImage> 

的OBJID然後在背襯豆通過檢查要求參數映射圖檢索到:

FacesContext context = FacesContext.getCurrentInstance(); 
String objId = context.getExternalContext().getRequestParameterMap().get("objId"); 

這是所有工作的罰款。但是現在我想用funkier PrimeFaces圖表所以我想它應該是很容易使用下面的代碼來代替:

<p:lineChart value="#{carBean.graphById" title="Linear Chart" style="width:400px;" widgetVar="chart" > 
    <f:param name="objId" value="#{car.objId}" /> 
</p:lineChart> 

的支持bean方法ofcourse返回CartesianChartModel而不是StreamedContent。現在的問題是context.getExternalContext().getRequestParameterMap().get("objId")返回null,而不是像以前那樣返回實際的ID。 f:參數lineChartgraphicImage沒有相同的工作方式?

我如何實現lineChart的相同結果?我可以以某種方式獲得傳遞給backing bean的變量,以便bean知道要在系列中放置什麼值?

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

+0

我不明白你爲什麼沒有爲你的目的使用dataTable的'var'屬性。 – perissf 2013-05-03 09:45:04

+0

我的var屬性是'car',所以你建議我應該有一個car.graph類的方法? – MrKiane 2013-05-03 09:47:36

+1

是的,如果我理解得好,這應該符合你的目的。 – perissf 2013-05-03 09:53:05

回答

1

由於JSF 2.1,你可以使用EL傳遞對象:

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

,或者,如果你想使用的汽車,使用objId屬性:

<p:lineChart value="#{carBean.getGraphByCarId(car.objId)" ... /> 
+0

接收方法將如何在輔助bean中查找?如何訪問提供的變量/對象? – MrKiane 2013-05-03 10:24:43

+0

如果我更改接受方法在支持bean接受(字符串ojbId)或(汽車車)我得到的錯誤,找不到方法。但是,如果我不向參數添加方法,我不會收到錯誤。我正在使用Mojarra 2.1.6 JSF實現。 – MrKiane 2013-05-03 10:30:33

+0

很明顯,我應該調用確切的方法名稱,而不是假設它放在前面。您的解決方案運行良好,非常感謝您的幫助! – MrKiane 2013-05-03 11:09:57