コールバック パラメータを送信できます。文字列などのプリミティブ型のみを送信する限り、完全に機能します。しかし、最も単純な POJO でさえ、同じことは機能しません。PrimeFaces ガイドによると、RequestContext.addCallbackParam() メソッドは POJO を処理でき、それらを JSON に変換します。私の場合、なぜそれが機能しないのかわかりません。
誰かがそれをしましたか?
コールバック パラメータを送信できます。文字列などのプリミティブ型のみを送信する限り、完全に機能します。しかし、最も単純な POJO でさえ、同じことは機能しません。PrimeFaces ガイドによると、RequestContext.addCallbackParam() メソッドは POJO を処理でき、それらを JSON に変換します。私の場合、なぜそれが機能しないのかわかりません。
誰かがそれをしましたか?
解決策が見つかりました!-------------------------------------------------- -------------------
私はいくつかの調査を行い、この質問に対する答えを見つけました。
そして解決策は、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));
}
ビューの 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);
}
提案や意見があれば、本当に感謝し、歓迎します。ありがとうございました!