正确显示和使用数据库中的Primefaces条形图

问题描述 投票:0回答:2

我很难理解如何从数据库显示PF图表。 PF用户文档主要涵盖如何静态生成图表的示例(即:通过硬编码值)。在此站点上,我仅在此处看到了有关如何从数据库生成PF图表的几个问题。我发现这个问题有帮助:

PrimeFaces Chart From Database

但是它并没有真正解释从数据库正确实现PF图表所需的逻辑和方法。我自己尝试了以下示例。该视图是:

<p:panel>
<p:barChart value="#{rigtestBean.cartChart}"/>
</p:panel>

托管bean方法:

public CartesianChartModel createRigTestModel() {
    cartChart = new CartesianChartModel();
    ChartSeries rigs = new ChartSeries();
    List<Rigtest> rList = rigFacade.findAll();
    Map<Object, Number> rigMap = new HashMap<>();        
    for(Rigtest o: rList) {

        rigMap.put(o.getCountry().getCountryname(), o.getRignum());

        rigs.setData(rigMap) ;
        cartChart.addSeries(rigs);

    }
    return cartChart;

}

以上内容与名为RigTest的表进行交互,该表具有以下值(国家名称,钻机数量,日期):

国家名称:美国,美国,法国,法国装备编号:2、20、40、200

运行代码时,在结果图中仅拾取两个数据点。它们是2和200,其余图表系列似乎被忽略了。调试器显示地图已正确填充,并且Chart系列(“ rigs”)也已正确填充。这表明问题出在我将系列添加到CartesianChartrmodel实例('cartChart')的方式上。真的很感谢我要去哪里的任何建议。关于更广泛的问题,关于我可以在何处阅读一些有关使用JPA从CRUD操作中实现PF图表的材料的建议。提前致谢。

jsf jpa primefaces charts
2个回答
1
投票

Kukeltje的评论帮助我找到了答案。在我的原始方法中,CartesianChartModel的初始化发生在方法的开头。由于此create方法是由bean getter方法调用的,因此在创建开始时初始化模型实例似乎具有多种循环效果,从而导致增强的for循环将映射中的每个记录视为一系列。这意味着6条记录被循环了36次,7条记录被循环了49次,等等。

在for循环和映射填充后初始化模型实例似乎可以解决问题,并在条形图中生成正确数量的记录。

public void createRigTestModel() {

    ChartSeries rigs = new ChartSeries();

    List<Rigtest> rList = rigFacade.findAll();

    Map<Object, Number> rigMap = new HashMap<>();
    for (Rigtest o : rList) {

        rigMap.put(o.getRigtestid(), o.getRignum());

        cartChart = new CartesianChartModel();
        rigs.setData(rigMap);
        cartChart.addSeries(rigs);

    }

}

0
投票

例如,如果要显示条形图,则图表系列可以是一组条形图。因此,您必须为for..loop内的每个条设置数据,然后在该循​​环之后将chartseries添加到模型中。您可以向图表模型添加许多系列(条形图)。

代码可能是:

public CartesianChartModel createRigTestModel() {
 cartChart = new CartesianChartModel();
 ChartSeries rigs = new ChartSeries();
 List<Rigtest> rList = rigFacade.findAll();

 for(Rigtest o: rList) {
    rigs.set(o.getCountry().getCountryname(), o.getRignum());       
 }
 cartChart.addSeries(rigs);

 return cartChart;

}

我希望这会有所帮助。


0
投票

如何制作这样的图表。...如何在x轴上制作这样的动态间隔.....

    BarChartSeries c1 = new BarChartSeries();
    BarChartSeries c2 = new BarChartSeries();
    c1.setLabel("Sale Quantity");
    c2.setLabel("Sale weight");
    myLog.debug("size =====" +salesAndStockOpr.getSalesAndStockList().size());
    if(salesAndStockOpr.getSalesAndStockList().size()>0) {
        for(SalesAndStockDVO salesAndStockRecord :salesAndStockOpr.getSalesAndStockList())
        {
            c1.set(salesAndStockRecord.getHierarchyCategory1()+"\n"+salesAndStockRecord.getLocation(), salesAndStockRecord.getSaleQuantity());
            c2.set(salesAndStockRecord.getHierarchyCategory1()+"\n"+salesAndStockRecord.getLocation(),salesAndStockRecord.getSaleNetWeight());
            multiAxisModelByHierarchy1.getAxes().put(AxisType.X, new CategoryAxis(salesAndStockRecord.getLocation()+" (Location)"));
        }
    }
   LineChartSeries c3 = new LineChartSeries();
   c3 .setLabel("sale Value");
   c3 .setYaxis(AxisType.Y2);
if(salesAndStockOpr.getSalesAndStockList().size()>0) {
   for(SalesAndStockDVO salesAndStockRecord :salesAndStockOpr.getSalesAndStockList() )
     {
       Double Price=(salesAndStockRecord.getTotalSalePrice()/100000);
       c3 .set(salesAndStockRecord.getHierarchyCategory1()+"\n"+salesAndStockRecord.getLocation(), Price);
     }
    }

\ n不适用于新行

© www.soinside.com 2019 - 2024. All rights reserved.