Après quelques recherches, la réponse semble être d'utiliser des modèles distincts pour chaque type de graphique que vous souhaitez créer. Dans l'exemple ci-dessous, je crée des modèles pour Barchart et Linechart, qui pourraient être étendus pour utiliser tout autre type de graphique pris en charge par PF. dans EL, j'appelle les tableaux de liste (c'est-à-dire [0]), mais ce n'est pas nécessaire et c'était juste ma préférence. J'ai également étendu la classe PF BarChartModel (ExtendedBarChartModel), mais l'exemple fonctionne bien si vous utilisez le BarChartModel standard.
J'espère que cela vous aidera et que tout commentaire est le bienvenu :
<p:dataGrid id="modellist" value="#{chartTestBean.xbarmod[0]}" var="barmd">
<p:chart id="gridchart" type="bar" model="#{barmd}" style="width: 150px; height: 150px"/>
</p:dataGrid>
<p:dataGrid id="linegrid" value="#{chartTestBean.linemodelList[0]}" var="linemod">
<p:chart id="linechart" type="line" model="#{linemod}" style="width: 150px; height: 150px"/>
</p:dataGrid>
.... Other chart models as needed here
Les méthodes de bean pour le modèle de graphique à barres :
public List<ExtendedBarModel> ModelList() {
xbarmod = new ArrayList();
sers = new ArrayList();
//chartType = "bar";
orig = guestChartFacade.findAll();
for (Enguestjoinchart j : orig) {
if (j.getCharttype().equals("bar")) {
setChartType("bar");
showBar = true;
idmid = j.getIdmid();
selJoin = guestChartFacade.find(idmid);
startDate = selJoin.getStartdate();
sers.add(idmid);
}
}
dsetList = setfacade.findTopsRange(sers);
processModelList();
return xbarmod;
}
public ExtendedBarModel processModelList() {
for (int i = 0; i < dsetList.size(); i++) {
idmid = dsetList.get(i).getIdmid();
pointList = pointFacade.pointRangeIdmid(idmid, startDate);
xtestmodel = new ExtendedBarModel("Barmodel " + dsetList.get(i).getIdmid());
chartSer = new ChartSeries();
for (Endatapoint p : pointList) {
chartSer.set(p.getRecords().getSeriesname(), p.getActualnum());
}
xtestmodel.addSeries(chartSer);
xbarmod.add(xtestmodel);
}
for (ExtendedBarModel b : xbarmod) {
xtestmodel = b;
return xtestmodel;
}
return null;
}
Pour le graphique en courbes :
public List<LineChartModel> makelinelistModel() {
linemodelList = new ArrayList();
linesers = new ArrayList();
orig = guestChartFacade.findAll();
for (Enguestjoinchart w : orig) {
if (w.getCharttype().equals("line")) {
idmidLine = w.getIdmid();
selJoinLine = guestChartFacade.find(idmidLine);
startDateLine = guestChartFacade.findStart(idmidLine);
endDateLine = guestChartFacade.findEnd(idmidLine);
linesers.add(idmidLine);
showLine = true;
}
}
if (linesers.size()==0) {
dsetlineList = null;
linemodelList = null;
}
else {
dsetlineList = setfacade.findTopsRange(linesers);
processLineModelList();
}
return linemodelList;
}
public LineChartModel processLineModelList() {
for (int i = 0; i < dsetlineList.size(); i++) {
idmidLine = dsetlineList.get(i).getIdmid();
pointListLine = pointFacade.pointLineRange(idmidLine, startDateLine, endDateLine);
linemodel = new LineChartModel();
chartSerLine = new ChartSeries();
Map<Object, Number> datMap = new HashMap();
DateAxis axis = new DateAxis();
for (Endatapoint p : pointListLine) {
chartSerLine.set(p.getPointdate().toString(), p.getActualnum());
linemodel.addSeries(chartSerLine);
}
linemodelList.add(linemodel);
linemodel.getAxes().put(AxisType.X, axis);
}
for (LineChartModel m : linemodelList) {
linemodel = m;
return linemodel;
}
return linemodel;
}
.... Other chart models