¿Cómo enviar un POJO como un param de devolución de llamada usando Solicitud de PrimeFacesContext?

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

Pregunta

Puedo enviar param de devolución de llamada y funciona perfectamente siempre y cuando solo esté enviando algunos tipos primitivos como la cadena.Pero lo mismo no funciona incluso para el pojo más simple.Guía PrimeFaces dice que el método SolicitudContext.AddCallBackParam () puede manejar POJOS y los encaja en JSON.No sé por qué no está trabajando en mi caso.

¿Alguien ha hecho eso?

¿Fue útil?

Solución

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!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top