2011-05-17 2 views
6

Je peux envoyer des paramètres de rappel (callback) et cela fonctionne parfaitement tant que je n'envoie que des types primitifs comme String. Mais la même chose ne fonctionne pas même pour le plus simple POJO. Le guide PrimeFaces indique que la méthode RequestContext.addCallbackParam() peut gérer les POJO et les recouvre dans JSON. Je ne sais pas pourquoi ça ne marche pas dans mon cas.Comment envoyer un POJO en tant que paramètre de rappel à l'aide de RequestContext de PrimeFaces?

Est-ce que quelqu'un a fait ça?

+0

Veuillez poster votre solution comme réponse (même si c'est la réponse à votre propre question). –

Répondre

6

Solution trouvée! -------------------------------------------------- J'ai fait des recherches et trouvé la réponse à cette question.

Et la solution était d'utiliser une bibliothèque JSON (en ce moment j'utilise GSON) pour convertir des objets Java en objets JSON.

nouvelle Gson(). ToJson (someJavaObj)

Chaîne de retour. Il suffit d'envoyer la chaîne en tant que param et du côté client en utilisant la fonction eval de js ou la bibliothèque de certains js pour le transformer en JSON.

En fait, c'était plutôt propre et simple.

Désolé, je n'ai pas publié la solution. Voici la ma solution -

méthode d'action dans le 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 dans la vue -

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

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

I apprécierait vraiment et accueillera toute suggestion ou opinion. Merci!

+0

Vous pouvez également utiliser 'org.primefaces.json. *' Qui est basé sur http://www.json.org/javadoc/org/json/JSONObject.html et déjà inclus avec Primefaces. –

+0

@BheshGuruang J'ai fait la même chose que la conversion en JSON mais j'ai utilisé Jackson et GSON. Dans la réponse http, les données ont un backslash pour une citation double ecah, car je ne peux pas l'analyser dans le script. Avez-vous le même problème? – user1595858

Questions connexes