Primefaces LineChart не показывает правильные значения даты (Google Chrome) - PullRequest
2 голосов
/ 09 марта 2019

У меня проблемы с использованием 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());

Спасибо, ребята, за ваш вклад!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...