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

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

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


person Bhesh Gurung    schedule 17.05.2011    source источник
comment
Пожалуйста, опубликуйте свое решение в качестве ответа (даже если это ответ на ваш собственный вопрос).   -  person Matt Handy    schedule 18.05.2011


Ответы (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);
}

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

person Bhesh Gurung    schedule 19.06.2011
comment
Вы также можете использовать org.primefaces.json.*, основанный на json.org/javadoc/org/json. /JSONObject.html и уже включены в Primefaces. - person Murat Derya Özen; 05.02.2012
comment
@BheshGuruang Я сделал то же самое, что и преобразование в json, но вместо этого использовал Jackson и GSON. В ответе http данные имеют обратную косую черту для двойной кавычки ecah, из-за этого я не могу разобрать ее в скрипте. У вас такая же проблема? - person user1595858; 30.08.2012