p: ChartSeries линейки диаграмм не синхронизированы

jsf-2 primefaces bar-chart jqplot

305 просмотра

1 ответ

27 Репутация автора

Я работал над моделью гистограммы PrimeFaces, и теперь она действует мне на нервы, я просто не могу понять, как она устанавливает значения для ряда графиков. Какого ожидаемого результата должно быть то, что One Open, скажем, 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>

Снимки ожидаемых и фактических результатов добавляются ниже.

ожидаемый результат

Фактический результат

Изменить После добавления

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

Я все еще получаю странные результаты: 1 открыт и 1 закрыт для xyz, 0 открыт и 0 закрыт для xyz.

Автор: HeartATech Источник Размещён: 19.07.2016 07:02

Ответы (1)


1 плюс

10074 Репутация автора

Решение

Единственное решение состоит в том, что вы, как разработчик, должны убедиться, что все серии содержат все ключи, и заполнить ключи, которых у вас нет, и убедиться, что все ключи во всех сериях находятся в одинаковом порядке.

Причина этого заключается в том, что только вы знаете реальный порядок (именно поэтому LinkedHashMapв серии используется). jQplot или PrimeFaces не могут этого знать. Если, например, в первой серии пропущен ключ, и эта серия используется в качестве «первичной» для итерации, куда будет добавлен отсутствующий ключ. И если, например, в положении 6, у обоих есть ключ, которого нет в другом наборе, какой из них следует взять первым? JqPlot или PrimeFaces не могут знать. Все причины, по которым вы как разработчик должны удостовериться в том, что это явно, помещают все ключи во все серии.

Автор: Kukeltje Размещён: 29.07.2016 12:19
Вопросы из категории :
32x32