前文:
Struts2 JSON プラグインを使用していますが、すべて適切に構成されているようです。
json アクションから JSON データを受け取ることができ、正常に動作します。
また、エラーなしで getJSON (単なる文字列、単純な文字列のキーと値のペアのみのマップ) を介して単純なデータを送信することもできます。私が期待するように、彼らは私のアクションに適切なプロパティを設定しました。
ただし、配列または別のマップを含むマップを送信しようとすると、サーバー側でエラーが発生し始めます。
うまくいけば混乱が少なくなるように、私がもう少しうまくやろうとしていることを示すために更新され、整理されました。
残念ながら、私が書いていたテスト用のものから移動したので、状況はかなり変わっています。意味のあるアクションのスライス:
private Map<String, String> viewedEntries;
public Map<String, String> getViewedList() {
return viewedEntries;
}
public void setViewedList(Map<String, String> viewedList) {
this.viewedEntries = viewedList;
}
public String submitViewedPDIJson() {
if (viewedEntries!=null && viewedEntries.size()>0) {
for (String key: viewedEntries.keySet()) {
System.out.println("viewedList[" + key + "] = " + viewedEntries.get(key));
}
} else {
System.out.println("No viewedList values.");
}
return Action.SUCCESS;
}
アクションの定義:
<action class="com.xxxxx.broker.struts.actions.PdiAction" method="submitViewedPDIJson" name="submitViewedPDIJson">
<result type="json">
<param name="noCache">true</param>
</result>
</action>
Javascript:
$("#submitViewed").submit(function(){
$.getJSON('pdi/submitViewedPDIJson.action', {"viewedEntries": {"broker1": true, "broker6": false}},function(data) {
console.log('submitted viewed entries map');
});
return false;
});
サーバー側のエラー:
15:00:12.505 ["http-bio-8080"-exec-9] WARN c.o.xwork2.ognl.OgnlValueStack - Error setting expression 'viewedEntries[broker1]' with value '[Ljava.lang.String;@cc831a'
ognl.OgnlException: target is null for setProperty(null, "null", [Ljava.lang.String;@cc831a)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2219) ~[xwork-core-2.1.6.jar:na]
at ognl.ASTProperty.setValueBody(ASTProperty.java:127) ~[xwork-core-2.1.6.jar:na]
ここで根本的に間違ったことをしている可能性があり、これは間違ったアプローチです。私が望んでいるのは、getJSON 呼び出しによって送信されたデータが取り込まれたサーバー上のマップを持つことです。そして、おそらく他のデータも同様です。単純なものには問題ないようですが、マップ内のマップなどを混在させるとうまくいきません。これが正しいアプローチでない場合は、正しい方向への指針をいただければ幸いです。