Question

Je peux envoyer des paramètres de rappel et cela fonctionne parfaitement tant que je n'envoie que des types primitifs comme une chaîne.Mais la même chose ne fonctionne pas pour même le pojo le plus simple.Guide PremierFaces indique que la méthode DemandeContext.AdddCallbackParam () peut gérer des pojos et les convient à JSON.Je ne sais pas pourquoi cela ne fonctionne pas dans mon cas.

Quelqu'un a-t-il fait ça?

Était-ce utile?

La solution

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!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top