【问题标题】:How to send a POJO as a callback param using PrimeFaces' RequestContext?如何使用 PrimeFaces 的 RequestContext 将 POJO 作为回调参数发送?
【发布时间】:2011-05-17 15:04:28
【问题描述】:

我可以发送回调参数,只要我只发送一些原始类型,如字符串,它就可以完美地工作。但是即使是最简单的 POJO,同样的事情也不起作用。 PrimeFaces 指南说 RequestContext.addCallbackParam() 方法可以处理 POJO 并将它们转换为 JSON。我不知道为什么它在我的情况下不起作用。

有人做过吗?

【问题讨论】:

  • 请将您的解决方案作为答案发布(即使它是您自己问题的答案)。

标签: callback primefaces pojo args requestcontext


【解决方案1】:

找到解决方案! -------------------------------------------------- -------------------

我做了一些研究,找到了这个问题的答案。

解决方案是使用一些 JSON 库(现在我正在使用 GSON)将 Java 对象转换为 JSON 对象。

新 Gson().toJson(someJavaObj)

返回字符串。只需将字符串作为参数发送,并在客户端使用 js 的 eval 或某些 js 库的函数将其再次转换为 JSON。

实际上,它非常干净和简单。

对不起,我实际上没有发布解决方案。以下是我的解决方案-

支持 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 -

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

我非常感谢并欢迎任何建议或意见。 谢谢!

【讨论】:

  • 您也可以使用org.primefaces.json.*,它基于json.org/javadoc/org/json/JSONObject.html 并且已经包含在Primefaces 中。
  • @BheshGuruang 我做了与转换为 json 相同的事情,但使用 Jackson 代替 GSON。在http resonse中,数据有ecah双引号的反斜杠,因此我无法在脚本中解析它。你有同样的问题吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
相关资源
最近更新 更多