p:图表栏的ChartSeries未同步

时间:2016-07-19 07:02:58

标签: jsf-2 primefaces bar-chart jqplot

我一直在研究PrimeFaces条形图模型,它现在让我紧张,我只是无法得到它的设定图表系列值。预期结果应该是一个开放的说abc和一个关闭的xyz,但它显示一个打开,一个关闭xyz,ABC被忽略。如果我改变了

的位置

barModel.addSeries(close); barModel.addSeries(open);

barModel.addSeries(open); barModel.addSeries(close);

然后它显示一个打开,一个关闭只有abc,而不是xyz。

首先是我的 getBarModel()

public BarChartModel getBarModel() {

barModel=new BarChartModel();

     ChartSeries open = new ChartSeries();
     open.setLabel("OPEN");
     ChartSeries close = new ChartSeries();
     close.setLabel("Close");
 open.set("abc", 1);
     close.set("xyz", 1);

     barModel.addSeries(close);
     barModel.addSeries(open);





        barModel.setMouseoverHighlight(false);
        barModel.setShowPointLabels(false);
        barModel.setTitle("Incident_application");
        barModel.setLegendPosition("ne");
        barModel.setShowDatatip(false);
        barModel.setShowPointLabels(true);
        barModel.setExtender("chartExtender");
        barModel.setSeriesColors("A2CC39,1B75BA");
        Axis xAxis = barModel.getAxis(AxisType.X);
        xAxis.setLabel("Applications");
        barModel.setAnimate(true);
        Axis yAxis = barModel.getAxis(AxisType.Y);
        yAxis.setLabel("No. of Incident");
        yAxis.setMin(0);
        yAxis.setMax(20);
        yAxis.setTickInterval("10");  

        return barModel;
}

这里是 xhtml     

<h:outputScript library="primefaces" name="jquery/jquery.js" target="head" />
<h:outputScript library="primefaces" name="jquery/jquery-plugins.js" target="head" />

<style type="text/css">

table.jqplot-table-legend {
border: none;
font-size: x-large;
}
div.jqplot-table-legend-swatch 
{
width: 2vw;
height: 2vh;
}
div.jqplot-gridData{
display:none;
}
div.jqplot-xaxis-tick{
font-weight:bold !important;
}
.jqplot-axis.jqplot-xaxis{
font-weight:bold;
}
.jqplot-point-label {
font-size: 300%;
color: black;
font-weight: bold;
}
.jqplot-target{
color:black !important;
}

</style>    
<script> 

function chartExtender() {        

this.cfg.grid = {             
background: 'transparent',
gridLineColor: '#303030',
drawBorder: false,
};


}
</script>
<h:form id="barChart">


<p:chart id="bar" type="bar"  model="#{incidentBarChartController.barModel}"  />


<p:poll interval="10" global="false"  update="barChart"/>

</h:form>

</h:body>

下面添加了预期和实际结果的快照。

Expected Result

Actual Result

修改 添加后

open.set("abc", 1);
         open.set("xyz",0);
         close.set("xyz", 1);
         close.set("abc", 0);

我仍然得到奇怪的结果,即 xyz打开1,关闭,0打开,0打开xyz。

1 个答案:

答案 0 :(得分:1)

唯一的解决方案是您作为开发人员确保所有系列都包含所有键并填充您没有的键,并确保所有系列中的所有键的顺序相同。

原因是只有你知道真正的顺序(这就是系列中使用LinkedHashMap的原因)。 jQplot或PrimeFaces无法知道这一点。如果是第一个系列错过了一个键,该系列被用作&#39;主要&#39;迭代,丢失的密钥放在哪里。如果是在第6位,两个都有一个不在另一个组中的键,应该先取一个? jqPlot或PrimeFaces无法知道。作为开发人员的所有原因都应该通过将所有键放在所有系列中来确保它是明确的。