sql >> データベース >  >> RDS >> Mysql

Primefaces5.0チャート-データベース値から完全に動的にチャートモデルとシリーズを作成する方法

    いくつかの調査の後、答えは、作成するチャートのタイプごとに別々のモデルを使用することであるように思われます。以下の例では、棒グラフと線グラフのモデルを作成しています。これらは、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
    



    1. 600万行のテーブルでのMysqlのパフォーマンス

    2. 2つの日付列から日付範囲を生成する

    3. PHP 7.2.2 + mysql 8.0 PDOは以下を提供します:クライアントに知られていない認証方法[caching_sha2_password]

    4. MySQLでのEXPORT_SET()関数のしくみ