Как отправить POJO в качестве обратного вызова параметра с использованием Preamfaces 'Requestcontext?

StackOverflow https://stackoverflow.com/questions/6032877

Вопрос

Я могу отправить обратный вызов param (ы), и он отлично работает до тех пор, пока я отправляю только некоторые примитивные типы, как строка.Но то же самое не работает даже на простейший POJO.Руководство по первому расширению гласит, что метод requestcontext.addcallbackparam () может обрабатывать pojos и охватывает их в json.Я не знаю, почему он не работает в моем случае.

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

Это было полезно?

Решение

Solution found! ---------------------------------------------------------------------

I did some research and found the answer to this question.

And the solution was to use some JSON library (right now I am using GSON) to convert Java objects to JSON objects.

new Gson().toJson(someJavaObj)

returns string. Just send the string as the param and on the client side using js' eval or some js library's function to turn that into JSON again.

Actually, it was pretty clean and simple.

Sorry I actually did not post the solution. Below is the my solution -

Action method in the backing bean -

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 in the view -

<p:commandLink action="#{pieDataProvider.retrievePieData}" oncomplete="feedPieData(xhr, status, args);"  value="Pie chart demo" update="pieData" />

Javascript function -

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

I would really appreciate and welcome any suggestion or opinion. Thank you!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top