Как отправить POJO в качестве параметра обратного вызова, используя RequestContext от PrimeFaces? - PullRequest
6 голосов
/ 17 мая 2011

Я могу отправить параметры обратного вызова, и он работает отлично, если я отправляю только некоторые примитивные типы, такие как String. Но то же самое не работает даже для самого простого POJO. Руководство PrimeFaces говорит, что метод RequestContext.addCallbackParam () может обрабатывать POJO, и он включает их в JSON. Я не знаю, почему это не работает в моем случае.

Кто-нибудь делал это?

1 Ответ

6 голосов
/ 19 июня 2011

Решение найдено! -------------------------------------------------- -------------------

Я провел небольшое исследование и нашел ответ на этот вопрос.

И решением было использовать некоторую библиотеку JSON (сейчас я использую GSON) для преобразования объектов Java в объекты JSON.

new 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: кнопка Command в представлении -

<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);
}

Буду очень признателен и приветствую любые предложения или мнения. Спасибо!

...