Jsf 一页多线条图(primefaces)

Jsf 一页多线条图(primefaces),jsf,primefaces,linechart,Jsf,Primefaces,Linechart,我试图在同一页上插入多个折线图。要了解我有bean的代码: public void createChartWithMetrics() { this.cartesianChartModel = new ArrayList<CartesianChartModel>(); ServiceMetricsDAO serviceMetricDAO = new ServiceMetricsDAO(); List<String> uriEntityList = n

我试图在同一页上插入多个折线图。要了解我有bean的代码:

public void createChartWithMetrics() {
    this.cartesianChartModel = new ArrayList<CartesianChartModel>();
    ServiceMetricsDAO serviceMetricDAO = new ServiceMetricsDAO();
    List<String> uriEntityList = new ArrayList<String>();
    for (TreeNode selectedNode : analyzeMetricMenuTree.getSelectedNodes()) {
        uriEntityList.add(selectedNode.getData().toString());
    }

    this.serviceMetricMap = serviceMetricDAO.getServiceMetricMapByEntityList(uriEntityList, Utility.convertDateToString(DATEFORMAT, dateFrom),
            Utility.convertDateToString(DATEFORMAT, dateTo));

    for (List<List<ServiceMetric>> serviceMetricListList : serviceMetricMap.values()) {
        if(!serviceMetricListList.isEmpty()) {
            this.cartesianChartModel.add(createModelFromList(serviceMetricListList));
        }
    }
}

private CartesianChartModel createModelFromList(final List<List<ServiceMetric>> serviceMetricListList) {
    CartesianChartModel cartesianChart = new CartesianChartModel();
    for (List<ServiceMetric> serviceMetricList : serviceMetricListList) {
        if (!serviceMetricList.isEmpty()) {
            ChartSeries chartSeries = new ChartSeries();
            for (ServiceMetric serviceMetric : serviceMetricList) {
                chartSeries.setLabel(serviceMetric.getDependsOn());
                chartSeries.set(serviceMetric.getAtTime(), serviceMetric.getHasMetricValue());
            }
            cartesianChart.addSeries(chartSeries);
        }
    }
    return cartesianChart;
}
public void createChartWithMetrics(){
this.cartesianChartModel=新ArrayList();
ServiceMetricsDAO serviceMetricDAO=新ServiceMetricsDAO();
List uriEntityList=new ArrayList();
对于(TreeNode selectedNode:analyzeMetricMenuTree.getSelectedNodes()){
添加(selectedNode.getData().toString());
}
this.serviceMetricMap=serviceMetricDAO.getServiceMetricMapByEntityList(UrientyList,Utility.convertDateToString(DATEFORMAT,dateFrom),
convertDateToString(DATEFORMAT,dateTo));
对于(列表serviceMetricListList:serviceMetricMap.values()){
如果(!serviceMetricListList.isEmpty()){
add(createModelFromList(serviceMetricListList));
}
}
}
私有CartesianChartModel createModelFromList(最终列表serviceMetricListList){
CartesianChartModel cartesianChart=新的CartesianChartModel();
对于(列表serviceMetricList:serviceMetricListList){
如果(!serviceMetricList.isEmpty()){
ChartSeries ChartSeries=新的ChartSeries();
对于(ServiceMetric ServiceMetric:serviceMetricList){
setLabel(serviceMetric.getDependsOn());
set(serviceMetric.getAtTime(),serviceMetric.getHasMetricValue());
}
cartesianChart.addSeries(图表系列);
}
}
回归笛卡尔艺术;
}
以及页面的代码:

<ui:repeat var="cartesianChartModel" value="#{analyzeMetricsController.cartesianChartModel}">
    <h:panelGroup layout="block" styleClass="panel panel-default col-lg-12" rendered="#{not empty cartesianChartModel}">
        <h:panelGroup layout="block" styleClass="panel-body panel-default">
            <p:lineChart id="chart" widgetVar="chart" 
                value="#{cartesianChartModel}" 
                legendPosition="ne" xaxisAngle="-45" zoom="true" 
                maxY="#{analyzeMetricsController.maxY}" 
                minY="#{analyzeMetricsController.minY}" 
                fill="#{analyzeMetricsController.filled}" 
                stacked="#{analyzeMetricsController.stacked}" />
        </h:panelGroup>
    </h:panelGroup>
</ui:repeat>

但仅插入最后一个模型图。此外,如果我在标签下添加此代码

<h:panelGroup layout="block" styleClass="panel-body panel-default">
    <p:lineChart id="chart" widgetVar="chart" 
        value="#{cartesianChartModel}" 
        legendPosition="ne" xaxisAngle="-45" zoom="true" 
        maxY="#{analyzeMetricsController.maxY}" 
        minY="#{analyzeMetricsController.minY}" 
        fill="#{analyzeMetricsController.filled}" 
        tacked="#{analyzeMetricsController.stacked}" />
</h:panelGroup>


只插入并忽略最后一个图形。

这是一个id问题,您需要执行以下操作:

<p:lineChart id="chart#{cartesianChartModel.id}" widgetVar="chart#{cartesianChartModel.id}" ... />


因为无法呈现具有相同ID的两个元素。

可能是ID问题。试试这个:谢谢@Lamq。我确信我曾试图更改id,但我没有这样做。但是属性id不存在,我使用
不客气。考虑验证answser和welcome on stack。今天早上做了一些测试,我意识到问题不在于id属性,而在于widgetVar属性。因为el表达式不是在id属性中计算的,并且创建的xhtml页面中的id对于所有折线图都是相同的。