正确显示和使用数据库中的Primefaces柱状图



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

PrimeFaces Chart From Database

但是它并没有真正解释从DB正确实现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的表交互,该表具有以下值(国家名称,钻机数量,日期):

国家名称:USA, USA, France, France钻机编号:2、20、40、200

当运行代码时,在结果图中只有两个数据点被拾取。这是2和200,图表系列的其他部分似乎被忽略了。调试器显示地图被正确填充,图表系列("钻机")也被正确填充。这表明问题在于我将系列添加到CartesianChartrmodel实例(' carchart ')的方式。如果你能告诉我哪里做错了,我会很感激的。在一个更广泛的问题上,我可以在哪里阅读一些关于使用JPA从CRUD操作实现PF图表的材料。提前感谢。

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);
    }
}

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

代码可以是:

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;
}

相关内容

  • 没有找到相关文章

最新更新