一个简单的问题,但我无法给出答案。
在简单的GCharts中,我有这个:
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Time');
data.addColumn('number', 'Value 1');
data.addColumn('number', 'Value 2');
但是,如何使用PrimerFaces的模型构建器将值指定为 datetime 和 number ?
.addColumns()方法仅将各项添加为List<String>
:
GChartModelBuilder lineChartModelBuilder = new GChartModelBuilder();
lineChartModelBuilder.setChartType(GChartType.LINE);
lineChartModelBuilder.addColumns("Time");
lineChartModelBuilder.addColumns("Value 1");
lineChartModelBuilder.addColumns("Value 2");
谢谢!
答案 0 :(得分:3)
我假设您使用的是非常旧的PF扩展版本?我说的原因早在2016年,已被固定为使用List<Object>
而非List<String>
,并在PrimeFaces Extensions 6.1或更高版本中发布。
该代码的最新版本可以在此处查看:https://github.com/primefaces-extensions/core/blob/master/src/main/java/org/primefaces/extensions/component/gchart/model/GChartModelBuilder.java
更新:
如果要使用键值对添加数据,则应该可以。由于GChart使用Google GSON将Java代码转换为客户端的JSON,我想如果您将String数组值放在字段中,它将像您期望的那样反序列化。
创建代表该列的POJO:
public class GChartModelColumn {
// column label
private final String label;
// column type: number, date, datetime
private final String type;
public GChartModelColumn(String label, String type) {
super();
this.label = label;
this.type = type;
}
public String getLabel() {
return label;
}
public String getType() {
return type;
}
}
然后使用上面的模型添加列,如...
lineChartModelBuilder.addColumns(
new GChartModelColumn("Time", "datetime"),
new GChartModelColumn("Value 1", "number"),
new GChartModelColumn("Value 2", "number"));
然后在JS代码中,它将您的数据对象转换为Google DataTable。
var dataTable = google.visualization.arrayToDataTable(this.data);