У меня проблемы с использованием Primefaces Chart с Google Chrome. Я хотел бы показать ряд значений (ось Y) в соответствии с конкретными датами (ось X). К сожалению, значения даты (ось X) не отображаются правильно в Google Chrome (Firefox и Internet Explorer работают хорошо).
Ниже приведен небольшой пример, демонстрирующий проблему.
XHTML:
<p:chart type="line" model="#{chartViewController.chartData}" style="height: 300px"/>
ChartViewController.java
@Named
@ViewScoped
public class ChartViewController implements Serializable {
public LineChartModel getChartData() {
LineChartModel lineChartModel = new LineChartModel();
LineChartSeries dataSeries = new LineChartSeries();
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
dataSeries.setLabel("Data");
Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR, -200*24);
for (int i = 0; i < 200; i++) {
dataSeries.set(sdf.format(cal.getTime()), i);
cal.add(Calendar.HOUR, 24);
}
/* Add values for y axis */
lineChartModel.setLegendPosition("ne");
lineChartModel.getAxis(AxisType.Y).setLabel("Values");
lineChartModel.addSeries(dataSeries);
DateAxis axis = new DateAxis("Datum");
axis.setTickAngle(-50);
axis.setMax(sdf.format(new Date()));
axis.setTickInterval("3 weeks");
axis.setTickFormat("%d.%m.%y");
lineChartModel.getAxes().put(AxisType.X, axis);
lineChartModel.setZoom(true);
return lineChartModel;
}
}
В Internet Explorer я вижу ожидаемые результаты:
Снимок экрана Internet Explorer
Однако, показ той же диаграммы в Google Chrome приводит к следующему рисунку:
Снимок экрана Google Chrome
Я также проверил свои настройки локали в Chrome, но пока они выглядят правильно.
Используемые версии:
- Браузер Google Chrome версии 72.0.3626.121 (64-разрядная версия)
- InternetExplorer 11 (также работает с Edge)
- Primefaces 6.2 (также протестирован с 6.3-Snapshot)
- Bootsfaces 1.4.0
- Apache Tomee 7.1
Мне было бы очень полезно, если бы кто-нибудь имел представление, почему это происходит и как это исправить. Сначала я подумал о проблеме с часовым поясом / локалями, но в настоящее время я совершенно бесцелен.
Спасибо за вашу помощь!
Обновление
При удалении галочки Interval я получаю следующее изображение в Google Chrome:
Результат Google Chrome без tickInterval
Похоже, что Дата интерпретируется в американском формате, а не в немецкой локали (03.09.2019 против 09.03.2019)
Обновление
ОК, похоже, сейчас работает.
Я изменил значения для оси X на длинные значения из объекта Date (), и теперь Google Chrome и Internet Explorer показывают одинаковые значения:
dataSeries.set(sdf.format(cal.getTime()), i);
...
axis.setMax(sdf.format(new Date()));
до
dataSeries.set(cal.getTime().getTime(), i);
...
axis.setMax((new Date()).getTime());
Спасибо, ребята, за ваш вклад!