#jsf #primefaces #primefaces-extensions
#jsf #первичные пространства #первичные пространства-расширения
Вопрос:
Простой вопрос, но я не могу придумать ответ.
В обычном GCharts у меня есть это:
var data = new google.visualization.DataTable();
data.addColumn('datetime', 'Time');
data.addColumn('number', 'Value 1');
data.addColumn('number', 'Value 2');
Однако, как я могу указать, что значениями являются datetime и number с помощью конструктора моделей PrimerFaces?
Метод .addColumns() просто добавляет элементы как List<String>
:
GChartModelBuilder lineChartModelBuilder = new GChartModelBuilder();
lineChartModelBuilder.setChartType(GChartType.LINE);
lineChartModelBuilder.addColumns("Time");
lineChartModelBuilder.addColumns("Value 1");
lineChartModelBuilder.addColumns("Value 2");
Спасибо!
Ответ №1:
Я предполагаю, что вы используете очень старую версию расширений PF? Причина, по которой я говорю это, заключается в том, что еще в 2016 году это было исправлено для использования List<Object>
вместо List<String>
и было выпущено в расширениях PrimeFaces 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 для клиента, я бы подумал, что если вы введете значение строкового массива в поле, оно десериализуется, как вы и ожидали.
Создайте 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.
var dataTable = google.visualization.arrayToDataTable(this.data);
Комментарии:
1. Спасибо, Melloware. В последней версии расширений PF я могу добавить объект в качестве столбца, но как я могу структурировать этот объект, чтобы диаграмма загружала псевдоним и тип? Что-то вроде .addColumns(новая пара («число», «Значение 1»)); или .addColumns (новая пара («дата-время», «Time»));
2. Это должно сработать, но вместо добавления пары он просто создает два столбца. Если я вставлю 3 пары, я получу 6 столбцов: i.imgur.com/qtdiNYU.png
3. Да, это неправильно. Глядя на исходный код, он просто добавляет эти объекты: github.com/primefaces-extensions/core/blob/master/src/main/java /… . Поэтому вам, возможно, придется просто посмотреть, как десериализуется Google GSON, чтобы поместить нужные объекты, чтобы получить нужные пары ключ-значение. Вы действительно близки к этому, просто нужно поработать с ним, чтобы создать нужный JSON.
4. Я получаю следующую ошибку: столбцы данных для оси # 0 не могут иметь тип string
5. Хорошо, я смог протестировать и заставить его работать и обновил свое решение выше!