如何在primefaces条形图中单击任何条形图时获取条形图数据

如何在primefaces条形图中单击任何条形图时获取条形图数据,primefaces,charts,jqplot,Primefaces,Charts,Jqplot,我使用的是Primefaces条形图,当链接到条形图中的任何条形图时,我希望在ChartSeries中显示数据。我的代码如下: <p:chart type="bar" model="#{dailyreport.horizontalBarChart}" rendered="#{dailyreport.chartDate != null}" style="height:900px;width:900px;" widgetVar="bchart"> </p:chart>

我使用的是Primefaces条形图,当链接到条形图中的任何条形图时,我希望在ChartSeries中显示数据。我的代码如下:

<p:chart type="bar" model="#{dailyreport.horizontalBarChart}"  rendered="#{dailyreport.chartDate != null}"  style="height:900px;width:900px;" widgetVar="bchart">
</p:chart>

我为系列设置的水平条形图,图中的值是(“00:14”,10)

我知道primefaces交互式图表,但如何获取图表中单击的特定项目数据。我设法做到了以下几点:

public void itemSelect(ItemSelectEvent event){
    Integer seriesIndex = event.getSeriesIndex();
    Integer itemIndex = event.getItemIndex();

HorizontalBarChartModel cModel = (HorizontalBarChartModel) ((org.primefaces.component.chart.Chart) event.getSource()).getModel();
List<ChartSeries> cData= cModel.getSeries();

Map<Object, Number> ct =  cData.get(seriesIndex).getData();
public void itemSelect(ItemSelectEvent事件){
整数seriesIndex=event.getSeriesIndex();
整数itemIndex=event.getItemIndex();
HorizontalBarChartModel cModel=(HorizontalBarChartModel)((org.primefaces.component.chart.chart)event.getSource()).getModel();
列表cData=cModel.getSeries();
Map ct=cData.get(serieIndex.getData();
}

如何使用itemIndex从映射中获取特定的项?

问题(现在基本上是普通的java;-)是ChartSeries上的getData()由LinkedHashMap支持,LinkedHashMap没有基于索引获取值的选项(即使LinkedHashMap是维护插入顺序的。因此,在填充模型时,您必须自己维护键和索引之间的映射,并将其保存在bean中。不必每次都这样做的另一个选项是扩展ChartSeries,如下所示:

package some.package;

import java.util.ArrayList;
import java.util.Map;

import org.primefaces.model.chart.ChartSeries;

public class MyChartSeries extends ChartSeries {

    private ArrayList<Object> indexKeyMapper = new ArrayList<>();

    public void setData(Map<Object, Number> data) {
        throw new RuntimeException("No, sorry");
    }

    public void set(Object x, Number y) {
        getData().put(x, y);
        indexKeyMapper.add(x);
    }

    public Object getKey(int index) {
        return indexKeyMapper.get(index);
    }

    public Number getData(int index) {
        return getData().get(indexKeyMapper.get(index));
    }

}
HorizontalBarChartModel cModel = (HorizontalBarChartModel) ((org.primefaces.component.chart.Chart) event.getSource()).getModel();

 ChartSeries mySeries = cModel.getSeries().get(event.getSeriesIndex());

 Set<Entry<Object, Number>> mapValues = mySeries.getData().entrySet();

 Entry<Object,Number>[] test = new Entry[mapValues.size()];

 mapValues.toArray(test);
System.out.prinlnt("Key"+test[event.getItemIndex].getKey());
System.out.prinlnt("Value"+test[event.getItemIndex].getValue());
package some.package;
导入java.util.ArrayList;
导入java.util.Map;
导入org.primefaces.model.chart.ChartSeries;
公共类MyChartSeries扩展了ChartSeries{
私有ArrayList indexKeyMapper=新ArrayList();
公共void setData(地图数据){
抛出新的RuntimeException(“否,抱歉”);
}
公共无效集(对象x,编号y){
getData().put(x,y);
添加索引键映射器(x);
}
公共对象getKey(int索引){
返回indexKeyMapper.get(索引);
}
公共编号getData(整数索引){
返回getData().get(indexKeyMapper.get(index));
}
}
然后可以对检索到的序列使用getData(event.getItemIndex())(不要忘记强制转换为MyChartSeries)

(这是可行的,我刚刚测试过)

问题(现在基本上是普通的java;-)是ChartSeries上的getData()由LinkedHashMap支持,LinkedHashMap没有基于索引获取值的选项(即使LinkedHashMap是维护插入顺序的。因此,在填充模型时,您必须自己维护键和索引之间的映射,并将其保存在bean中。不必每次都这样做的另一个选项是扩展ChartSeries,如下所示:

package some.package;

import java.util.ArrayList;
import java.util.Map;

import org.primefaces.model.chart.ChartSeries;

public class MyChartSeries extends ChartSeries {

    private ArrayList<Object> indexKeyMapper = new ArrayList<>();

    public void setData(Map<Object, Number> data) {
        throw new RuntimeException("No, sorry");
    }

    public void set(Object x, Number y) {
        getData().put(x, y);
        indexKeyMapper.add(x);
    }

    public Object getKey(int index) {
        return indexKeyMapper.get(index);
    }

    public Number getData(int index) {
        return getData().get(indexKeyMapper.get(index));
    }

}
HorizontalBarChartModel cModel = (HorizontalBarChartModel) ((org.primefaces.component.chart.Chart) event.getSource()).getModel();

 ChartSeries mySeries = cModel.getSeries().get(event.getSeriesIndex());

 Set<Entry<Object, Number>> mapValues = mySeries.getData().entrySet();

 Entry<Object,Number>[] test = new Entry[mapValues.size()];

 mapValues.toArray(test);
System.out.prinlnt("Key"+test[event.getItemIndex].getKey());
System.out.prinlnt("Value"+test[event.getItemIndex].getValue());
package some.package;
导入java.util.ArrayList;
导入java.util.Map;
导入org.primefaces.model.chart.ChartSeries;
公共类MyChartSeries扩展了ChartSeries{
私有ArrayList indexKeyMapper=新ArrayList();
公共void setData(地图数据){
抛出新的RuntimeException(“否,抱歉”);
}
公共无效集(对象x,编号y){
getData().put(x,y);
添加索引键映射器(x);
}
公共对象getKey(int索引){
返回indexKeyMapper.get(索引);
}
公共编号getData(整数索引){
返回getData().get(indexKeyMapper.get(index));
}
}
然后可以对检索到的序列使用getData(event.getItemIndex())(不要忘记强制转换为MyChartSeries)

(这是可行的,我刚刚测试过)

问题(现在基本上是普通的java;-)是ChartSeries上的getData()由LinkedHashMap支持,LinkedHashMap没有基于索引获取值的选项(即使LinkedHashMap是维护插入顺序的。因此,在填充模型时,您必须自己维护键和索引之间的映射,并将其保存在bean中。不必每次都这样做的另一个选项是扩展ChartSeries,如下所示:

package some.package;

import java.util.ArrayList;
import java.util.Map;

import org.primefaces.model.chart.ChartSeries;

public class MyChartSeries extends ChartSeries {

    private ArrayList<Object> indexKeyMapper = new ArrayList<>();

    public void setData(Map<Object, Number> data) {
        throw new RuntimeException("No, sorry");
    }

    public void set(Object x, Number y) {
        getData().put(x, y);
        indexKeyMapper.add(x);
    }

    public Object getKey(int index) {
        return indexKeyMapper.get(index);
    }

    public Number getData(int index) {
        return getData().get(indexKeyMapper.get(index));
    }

}
HorizontalBarChartModel cModel = (HorizontalBarChartModel) ((org.primefaces.component.chart.Chart) event.getSource()).getModel();

 ChartSeries mySeries = cModel.getSeries().get(event.getSeriesIndex());

 Set<Entry<Object, Number>> mapValues = mySeries.getData().entrySet();

 Entry<Object,Number>[] test = new Entry[mapValues.size()];

 mapValues.toArray(test);
System.out.prinlnt("Key"+test[event.getItemIndex].getKey());
System.out.prinlnt("Value"+test[event.getItemIndex].getValue());
package some.package;
导入java.util.ArrayList;
导入java.util.Map;
导入org.primefaces.model.chart.ChartSeries;
公共类MyChartSeries扩展了ChartSeries{
私有ArrayList indexKeyMapper=新ArrayList();
公共void setData(地图数据){
抛出新的RuntimeException(“否,抱歉”);
}
公共无效集(对象x,编号y){
getData().put(x,y);
添加索引键映射器(x);
}
公共对象getKey(int索引){
返回indexKeyMapper.get(索引);
}
公共编号getData(整数索引){
返回getData().get(indexKeyMapper.get(index));
}
}
然后可以对检索到的序列使用getData(event.getItemIndex())(不要忘记强制转换为MyChartSeries)

(这是可行的,我刚刚测试过)

问题(现在基本上是普通的java;-)是ChartSeries上的getData()由LinkedHashMap支持,LinkedHashMap没有基于索引获取值的选项(即使LinkedHashMap是维护插入顺序的。因此,在填充模型时,您必须自己维护键和索引之间的映射,并将其保存在bean中。不必每次都这样做的另一个选项是扩展ChartSeries,如下所示:

package some.package;

import java.util.ArrayList;
import java.util.Map;

import org.primefaces.model.chart.ChartSeries;

public class MyChartSeries extends ChartSeries {

    private ArrayList<Object> indexKeyMapper = new ArrayList<>();

    public void setData(Map<Object, Number> data) {
        throw new RuntimeException("No, sorry");
    }

    public void set(Object x, Number y) {
        getData().put(x, y);
        indexKeyMapper.add(x);
    }

    public Object getKey(int index) {
        return indexKeyMapper.get(index);
    }

    public Number getData(int index) {
        return getData().get(indexKeyMapper.get(index));
    }

}
HorizontalBarChartModel cModel = (HorizontalBarChartModel) ((org.primefaces.component.chart.Chart) event.getSource()).getModel();

 ChartSeries mySeries = cModel.getSeries().get(event.getSeriesIndex());

 Set<Entry<Object, Number>> mapValues = mySeries.getData().entrySet();

 Entry<Object,Number>[] test = new Entry[mapValues.size()];

 mapValues.toArray(test);
System.out.prinlnt("Key"+test[event.getItemIndex].getKey());
System.out.prinlnt("Value"+test[event.getItemIndex].getValue());
package some.package;
导入java.util.ArrayList;
导入java.util.Map;
导入org.primefaces.model.chart.ChartSeries;
公共类MyChartSeries扩展了ChartSeries{
私有ArrayList indexKeyMapper=新ArrayList();
公共void setData(地图数据){
抛出新的RuntimeException(“否,抱歉”);
}
公共无效集(对象x,编号y){
getData().put(x,y);
添加索引键映射器(x);
}
公共对象getKey(int索引){
返回indexKeyMapper.get(索引);
}
公共编号getData(整数索引){
返回getData().get(indexKeyMapper.get(index));
}
}
然后可以对检索到的序列使用getData(event.getItemIndex())(不要忘记强制转换为MyChartSeries)

(这很管用,I j