Ошибка при отправке и получении карты данных через jQuery getJSON с плагином struts2 json - PullRequest
1 голос
/ 18 октября 2011

Преамбула:

Я использую плагин 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. И, возможно, некоторые другие данные. Кажется, это хорошо работает для простых вещей, но смешивание в maps-inside-maps и т. Д. Не работает. Если это неправильный подход, я был бы признателен за любые указатели в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...