1

前言:

我正在使用 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 调用发送的数据填充。可能还有其他一些数据。它似乎适用于简单的东西,但在地图中混合地图等是行不通的。如果这不是正确的方法,我将不胜感激任何正确方向的指示。

4

0 回答 0