いくつかの調査の後、答えは、作成するチャートのタイプごとに別々のモデルを使用することであるように思われます。以下の例では、棒グラフと線グラフのモデルを作成しています。これらは、PFでサポートされている他のグラフタイプを使用するように拡張できます。 ELではリスト配列(つまり[0])を呼び出していますが、これは必須ではなく、私の好みでした。また、PF BarChartModelクラス(ExtendedBarChartModel)を拡張しましたが、標準のBarChartModelを使用すると、この例は正常に機能します。
これがお役に立てば幸いです。フィードバックをお待ちしております:
<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
棒グラフモデルのBeanメソッド:
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;
}
折れ線グラフの場合:
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