Primefaces LineChart没有显示正确的日期值(Google Chrome)

时间:2019-03-09 10:01:48

标签: java tomcat charts primefaces tomee

我无法在Google Chrome中使用Primefaces Chart。我想根据特定日期(X轴)显示一系列值(Y轴)。不幸的是,日期(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中,我看到了预期的结果:

Screenshot Internet Explorer

但是,在Google Chrome中显示相同的图表会显示以下图片:

Screenshot Google Chrome

我也检查了我在Chrome中的语言环境设置,但到目前为止,它们看起来不错。

使用的版本:

  • Google Chrome浏览器版本72.0.3626.121(64位)
  • InternetExplorer 11(也可用于Edge)
  • Primefaces 6.2(也已通过6.3快照测试)
  • Bootsfaces 1.4.0
  • Apache Tomee 7.1

如果有人知道为什么会发生以及如何解决它,我将非常有帮助。首先,我想到了一些时区/地区问题,但目前我完全没有目标。

谢谢您的协助!

更新

在删除tickInterval时,我在Google Chrome浏览器中得到以下图片:

Google Chrome result without tickInterval

好像日期是用美国格式而不是德语语言环境解释的(03.09.2019 vs.09.03.2019)

更新 好的,看来现在可以使用了。

我从Date()对象将X轴的值更改为长值,现在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());

谢谢大家的投入!

0 个答案:

没有答案