Primefaces <p:chart> 未正确显示
Primefaces <p:chart> not being properly shown
我正在尝试根据 this 示例构建日期图表:
.xhtml:
<p:chart id="graficoVendasPorPeriodo" type="line" model="#{relatorioVendaMB.vendasPorPeriodo}"/>
.java:
private void constroiVendasPorPeriodo(Date dataInicio, Date dataFim) {
List<Object[]> vendasPeriodo = ControleVenda.listarQtdeVendasPorPeriodo(dataInicio, dataFim);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
vendasPorPeriodo = new LineChartModel();
LineChartSeries lcs = new LineChartSeries();
lcs.setLabel("Vendas Por Período");
int max = 0;
for (Object[] obj : vendasPeriodo) {
int i = ((BigInteger) obj[1]).intValue();
lcs.set(obj[0], i);
if (i >= max) {
max = i;
}
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dataFim);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
dataFim = calendar.getTime();
calendar.setTime(dataInicio);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
dataInicio = calendar.getTime();
vendasPorPeriodo.addSeries(lcs);
vendasPorPeriodo.setTitle("Vendas por período");
vendasPorPeriodo.setZoom(true);
Axis yAxis = vendasPorPeriodo.getAxis(AxisType.Y);
yAxis.setLabel("Vendas");
yAxis.setMax(max+10);
yAxis.setMin(0);
DateAxis xAxis = new DateAxis("Período");
xAxis.setTickAngle(-50);
xAxis.setMin(sdf.format(dataInicio));
xAxis.setMax(sdf.format(dataFim));
xAxis.setTickFormat("%#d-%m-%Y");
System.out.println("Período: " + sdf.format(dataInicio) + ", " + sdf.format(dataFim));
vendasPorPeriodo.getAxes().put(AxisType.X, xAxis);
}// this method is being called in the '@PostConstruct' method
listarQtdeVendasPorPeriodo(dataInicio, dataFim)
方法 returns 一个 List<Object[]>
,其中每个 'Object[]' 数组在第一个位置包含一个字符串,在第二个位置包含一个 int。
问题是,当我执行代码时,绝对没有显示任何内容,甚至没有显示空图表或异常。有人可以指出我的错误并帮助我解决这个问题吗?提前致谢
我认为问题在于 Primefaces 使用您的日期格式的底层 Jqplot 不正确。看到这个答案:jqplot: "this.proxy.getTime is not a function" / date input parser?
我正在尝试根据 this 示例构建日期图表:
.xhtml:
<p:chart id="graficoVendasPorPeriodo" type="line" model="#{relatorioVendaMB.vendasPorPeriodo}"/>
.java:
private void constroiVendasPorPeriodo(Date dataInicio, Date dataFim) {
List<Object[]> vendasPeriodo = ControleVenda.listarQtdeVendasPorPeriodo(dataInicio, dataFim);
SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy");
vendasPorPeriodo = new LineChartModel();
LineChartSeries lcs = new LineChartSeries();
lcs.setLabel("Vendas Por Período");
int max = 0;
for (Object[] obj : vendasPeriodo) {
int i = ((BigInteger) obj[1]).intValue();
lcs.set(obj[0], i);
if (i >= max) {
max = i;
}
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(dataFim);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1);
dataFim = calendar.getTime();
calendar.setTime(dataInicio);
calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) - 1);
dataInicio = calendar.getTime();
vendasPorPeriodo.addSeries(lcs);
vendasPorPeriodo.setTitle("Vendas por período");
vendasPorPeriodo.setZoom(true);
Axis yAxis = vendasPorPeriodo.getAxis(AxisType.Y);
yAxis.setLabel("Vendas");
yAxis.setMax(max+10);
yAxis.setMin(0);
DateAxis xAxis = new DateAxis("Período");
xAxis.setTickAngle(-50);
xAxis.setMin(sdf.format(dataInicio));
xAxis.setMax(sdf.format(dataFim));
xAxis.setTickFormat("%#d-%m-%Y");
System.out.println("Período: " + sdf.format(dataInicio) + ", " + sdf.format(dataFim));
vendasPorPeriodo.getAxes().put(AxisType.X, xAxis);
}// this method is being called in the '@PostConstruct' method
listarQtdeVendasPorPeriodo(dataInicio, dataFim)
方法 returns 一个 List<Object[]>
,其中每个 'Object[]' 数组在第一个位置包含一个字符串,在第二个位置包含一个 int。
问题是,当我执行代码时,绝对没有显示任何内容,甚至没有显示空图表或异常。有人可以指出我的错误并帮助我解决这个问题吗?提前致谢
我认为问题在于 Primefaces 使用您的日期格式的底层 Jqplot 不正确。看到这个答案:jqplot: "this.proxy.getTime is not a function" / date input parser?