序言:
我正在使用Struts2 JSON插件,它似乎都配置正确。
我可以从我的json动作接收JSON数据,并且工作正常。
我也可以通过getJSON发送简单数据(只是一个字符串,一个只有简单字符串键的映射:值对)也没有错误。他们按照我的预期在我的Action上设置了适当的属性。
然而,当我尝试发送包含数组或其他地图的地图时,我开始在服务器端出错。
更新了并进行了清理,以显示我正在尝试的更好一点,希望减少混乱。
不幸的是,我已经从我正在编写的测试内容中转移了所以事情已经发生了一些变化。 有意义的一揽子行动:
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]
我可能在这里做了一些根本错误的事情,这是错误的做法。我希望做的是让我的服务器上的Map由getJSON调用发送的数据填充。还可能还有其他一些数据。它似乎适用于简单的东西,但混合地图 - 地图等,不起作用。 如果这不是正确的方法,我会感谢任何正确方向的指针。