Después de investigar un poco, la respuesta parece ser usar modelos separados para cada tipo de gráfico que desee crear. En el siguiente ejemplo, estoy creando modelos para Barchart y Linechart, que podrían extenderse para usar cualquier otro tipo de gráfico compatible con PF. en EL estoy llamando a las matrices de lista (es decir, [0]), pero esto no es necesario y era solo mi preferencia. También amplié la clase PF BarChartModel (ExtendedBarChartModel), pero el ejemplo funciona bien si usa el BarChartModel estándar.
Espero que esto ayude y cualquier comentario es bienvenido:
<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
Los métodos de bean para el modelo de gráfico de barras:
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;
}
Para el gráfico de líneas:
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