如何使用PrimeFaces的RequestContext将POJO作为回调参数发送?

Bhe*_*ung 6 callback pojo args requestcontext primefaces

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

有人这样做过吗?

Bhe*_*ung 6

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

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

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

new 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));
}
Run Code Online (Sandbox Code Playgroud)

PrimeFaces p:命令视图中的commandButton -

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

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);
}
Run Code Online (Sandbox Code Playgroud)

我真的很感激并欢迎任何建议或意见.谢谢!