Jsf 一页多线条图(primefaces)
我试图在同一页上插入多个折线图。要了解我有bean的代码: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
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对于所有折线图都是相同的。