Java 创建带有日期类型列的google visualization datatable时出现TypeMismatchException

Java 创建带有日期类型列的google visualization datatable时出现TypeMismatchException,java,jsp,date,datatable,google-visualization,Java,Jsp,Date,Datatable,Google Visualization,好吧,经过几天的努力,我还是没能成功 这就是问题所在:我有一个JSP,它承载一个Google图表,该图表将由通过Servlet发送的数据构建。我正在使用Google可视化Java库来实现这个servlet 然后我有一个helper函数,它获取存储在对象列表中的一些数据,构造一个datatable。下面是实现上述函数的类: public class DataTableGenerator { public static DataTable generateDatatable(Lis

好吧,经过几天的努力,我还是没能成功

这就是问题所在:我有一个JSP,它承载一个Google图表,该图表将由通过Servlet发送的数据构建。我正在使用Google可视化Java库来实现这个servlet

然后我有一个helper函数,它获取存储在对象列表中的一些数据,构造一个datatable。下面是实现上述函数的类:

    public class DataTableGenerator {

    public static DataTable generateDatatable(List<AccesoUrl> accesos) {

        DataTable data = new DataTable();

        ArrayList<ColumnDescription> cd = new ArrayList<>();
        cd.add(new ColumnDescription("fecha", ValueType.DATE, "Fecha"));
        cd.add(new ColumnDescription("navegador", ValueType.TEXT, "Navegador"));
        cd.add(new ColumnDescription("ip", ValueType.TEXT, "IP"));
        cd.add(new ColumnDescription("os", ValueType.TEXT, "Sistema Operativo"));

        data.addColumns(cd);


        try {

            for(AccesoUrl acceso : accesos) {
                GregorianCalendar calendario = new GregorianCalendar();
                calendario.setTimeZone(TimeZone.getTimeZone("GMT"));                

                data.addRowFromValues(calendario, acceso.getNavegador(), acceso.getIp(), acceso.getSistemaoperativo());

            }

        } catch (TypeMismatchException e) {
            System.out.println(e);
        }

        return data;
    }
}
公共类DataTableGenerator{
公共静态数据表generateDatatable(列表访问){
DataTable数据=新DataTable();
ArrayList cd=新的ArrayList();
cd.添加(新列描述(“fecha”,ValueType.DATE,“fecha”);
添加(新列描述(“navegador”,ValueType.TEXT,“navegador”);
cd.添加(新列描述(“ip”,ValueType.TEXT,“ip”);
cd.add(新列描述(“os”,ValueType.TEXT,“系统操作”);
数据。添加列(cd);
试一试{
for(AccesoUrl acceso:accesos){
GregorianCalendar calendario=新的GregorianCalendar();
calendario.setTimeZone(TimeZone.getTimeZone(“GMT”));
data.addRowFromValues(calendario、acceso.getNavegador()、acceso.getIp()、acceso.getsistemoperativo());
}
}捕获(类型不匹配异常e){
系统输出打印ln(e);
}
返回数据;
}
}
现在,这段代码应该可以工作了,但我在web服务器上遇到了以下异常:

com.google.visualization.datasource.base.typemischException:值类型不匹配。 位于com.google.visualization.datasource.datatable.value.ValueType.createValue(未知源) 位于com.google.visualization.datasource.datatable.datatable.addRowFromValues(未知源)

我现在束手无策。我已经尝试了在Google上找到的每一种变体,因此我的JSP将这些数据显示在Google表格类型的图表上。我尝试过以字符串形式发送日期,以字符串形式发送日期,格式为javascript日期(即“日期(2015,4,4)”或“新日期(2015,4,4)”)。我还尝试使用java可视化库附带的DateValue对象来构造日期(即新的DateValue(2015,4,4))。我也尝试过传递Java日期。什么都不管用,一切都会引发类型不匹配异常

我确信这是给我带来麻烦的日期,因为只要我从datatable中删除date列,一切都会正常运行,毫无例外,我可以在Google图表表上显示我的数据


那么,有谁能告诉我,为了能够用日期单元格构造数据表,我在Java代码中必须做些什么呢?

即使我面临同样的问题。但是addRowFromValues()似乎不支持DateValue()。我去了addRow(TableRow)。没有看到任何错误。 你可以用下面的方法, 示例代码:

DataTable data = new DataTable();
ArrayList<ColumnDescription> cd = new ArrayList<ColumnDescription>();
cd.add(new ColumnDescription("date", ValueType.DATE, "Executed Date"));
cd.add(new ColumnDescription("value", ValueType.NUMBER, "Duration "));
data.addColumns(cd);
TableRow tr = new TableRow(); 
tr.addCell(new DateValue(2015,7,7));
data.addRow(tr);
DataTable data=newdatatable();
ArrayList cd=新的ArrayList();
cd.添加(新列描述(“日期”,ValueType.date,“执行日期”);
添加(新列描述(“值”,ValueType.NUMBER,“持续时间”);
数据。添加列(cd);
TableRow tr=新的TableRow();
tr.addCell(新日期值(2015,7,7));
data.addRow(tr);

您是否尝试过“java.util.Date对象+ValueType.DATETIME”组合?我的意思是代替ValueType.DATE。@GergelyBacso是的,我忘了提到它,但是ValueType.DATETIME也给我带来了麻烦。我已经试过你的建议了