Na wat onderzoek lijkt het antwoord te zijn om aparte modellen te gebruiken voor elk type diagram dat je wilt maken. In het onderstaande voorbeeld maak ik modellen voor staafdiagram en lijndiagram, die kunnen worden uitgebreid om andere diagramtypen te gebruiken die door PF worden ondersteund. in de EL noem ik de lijstarrays (dwz [0]), maar dit is niet nodig en was gewoon mijn voorkeur. Ook heb ik de PF BarChartModel-klasse uitgebreid (ExtendedBarChartModel), maar het voorbeeld werkt prima als je het standaard BarChartModel gebruikt.
Ik hoop dat dit helpt en alle feedback is welkom:
<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
De bonenmethoden voor het staafdiagrammodel:
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;
}
Voor het lijndiagram:
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