Как отправить POJO в качестве параметра обратного вызова, используя RequestContext от PrimeFaces?
Я могу отправить callback param(s), и он отлично работает, пока я отправляю только некоторые примитивные типы, такие как String. Но то же самое не работает даже для самого простого POJO. Руководство PrimeFaces говорит, что метод RequestContext.addCallbackParam() может обрабатывать POJO, и он включает их в JSON. Я не знаю, почему это не работает в моем случае.
Кто-нибудь сделал это?
1 ответ
Решение найдено! ---------------------------------------------------------------------
Я провел некоторое исследование и нашел ответ на этот вопрос.
И решением было использовать некоторую библиотеку JSON (сейчас я использую GSON) для преобразования объектов Java в объекты JSON.
новый Gson().toJson(someJavaObj)
возвращает строку Просто отправьте строку в качестве параметра и на стороне клиента, используя js' eval или некоторую функцию библиотеки js, чтобы снова превратить это в JSON.
На самом деле, это было довольно чисто и просто.
Извините, я на самом деле не опубликовал решение. Ниже мое решение -
Метод действия в бэк-бэк -
public void retrievePieData() {
List<String> categories = new ArrayList<String>();
categories.add("Electronic");
categories.add("Food");
categories.add("Liguor");
categories.add("Stationary");
categories.add("Mechanical");
List<Integer> itemCounts = new ArrayList<Integer>();
itemCounts.add(5);
itemCounts.add(20);
itemCounts.add(1);
itemCounts.add(50);
itemCounts.add(10);
RequestContext reqCtx = RequestContext.getCurrentInstance();
reqCtx.addCallbackParam("categories", new Gson().toJson(categories));
reqCtx.addCallbackParam("itemCounts", new Gson().toJson(itemCounts));
}
PrimeFaces p: commandButton в представлении -
<p:commandLink action="#{pieDataProvider.retrievePieData}" oncomplete="feedPieData(xhr, status, args);" value="Pie chart demo" update="pieData" />
Функция JavaScript -
function feedPieData(xhr, status, args) {
var categories = eval('(' + args.categories + ')');
var itemCounts = eval('(' + args.itemCounts + ')');
options.xAxis.categories = categories;
var series = {
data: []
};
series.name = new Date().toString();
series.data = itemCounts;
options.series = [series];
chart = new Highcharts.Chart(options);
}
Буду очень признателен и приветствую любые предложения или мнения. Спасибо!