Как указать тип столбца в pe: gcharts - PullRequest
3 голосов
/ 16 марта 2019

Простой вопрос, но я не могу придумать ответ.

В простых GCharts у меня есть это:

var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Time');
data.addColumn('number', 'Value 1');
data.addColumn('number', 'Value 2');

Однако, как я могу указать, что значения datetime и число с конструктором моделей PrimerFaces?

Метод .addColumns () просто добавляет элементы как List<String>:

GChartModelBuilder lineChartModelBuilder = new GChartModelBuilder();
lineChartModelBuilder.setChartType(GChartType.LINE);    
lineChartModelBuilder.addColumns("Time");
lineChartModelBuilder.addColumns("Value 1");
lineChartModelBuilder.addColumns("Value 2");

Спасибо!

1 Ответ

3 голосов
/ 16 марта 2019

Я предполагаю, что вы используете очень старую версию PF Extensions? Причина, по которой я говорю, еще в 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

Исправлено в 2016 году: https://github.com/primefaces-extensions/core/commit/6c473bbc50920bfdaedca02b918c29a5ead8d4d0#diff-f3a907dcc2d19626bf60db5bbebba6be

Обновление:

Если вы хотите добавить данные, используя пары ключ-значение, это должно быть возможно. Поскольку 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);
...