Spring MVC: невозможно получить значение json в jsp, оно дает 0

Нужна ваша помощь. Я не могу получить строку json в jsp после добавления в modelAndView. После отладки я обнаружил, что он добавляется в экземпляр modelAndView.

Ниже приведен фрагмент кода:

Контроллер:

modelAndView.addObject("json-data",jsonhelper.getJSONString(viewData));

JSP

<c:if test="${json-data != null}">

<script type="text/javascript">

     window.jsonData =${json-data};

 </script>

</c:if>

Здесь viewData - это объект, который мне нужно получить в jsp, но в jsp он дает 0.


person ved    schedule 05.05.2015    source источник
comment
Так как же javascript понимает, что такое ваш java-код?   -  person Mukus    schedule 05.05.2015
comment
Это печатается в вашем контроллере?   -  person Naman Gala    schedule 05.05.2015
comment
вы можете попробовать этот код в своем jsp <script type="text/javascript">var jsonStr = <c:out value="${json}"/>; alert(jsonStr);</script>   -  person Naman Gala    schedule 05.05.2015
comment
@NamanGala, да, это напечатано в контроллере.   -  person ved    schedule 05.05.2015
comment
@NamanGala, когда я пытаюсь предупредить строку json, она дает 0.   -  person ved    schedule 05.05.2015
comment
Просто пытаюсь перепроверить, вы печатаете jsonhelper.getJSONString(viewData) или viewData в своем контроллере?   -  person Naman Gala    schedule 05.05.2015
comment
Вы видели какие-либо ошибки в логах сервера? Вы пробовали предложение Bewusstsein?   -  person Gyan    schedule 05.05.2015
comment
Да пробовал, работает отлично. Журналов ошибок нет. Но я хочу знать полную информацию о том, какие еще правила следует соблюдать, чтобы избежать подобных проблем.   -  person ved    schedule 05.05.2015


Ответы (1)


Тире (-) в json-data интерпретируется как арифметический оператор minus.

Согласно spec (1.7.1):

Бинарные операторы - A {+,-,*} B

Если A и B равны нулю, вернуть (Long)0

Поэтому json-data преобразуется в 0, json-data != null возвращает true, а window.jsonData присваивается значение 0.

Одним из решений является переименование вашей переменной в jsonData или любой другой действительный идентификатор Java.

В качестве альтернативы, это также будет работать:

window.jsonData = <%= request.getAttribute("json-data") %>
person Bewusstsein    schedule 05.05.2015
comment
Я понял это, но это упоминается где-то в документации - person ved; 05.05.2015
comment
@ved Я посмотрел и обнаружил, что мой первый ответ был не совсем правильным, см. отредактированный ответ для уточнения и ссылки на спецификацию EL. - person Bewusstsein; 05.05.2015
comment
указанная вами ссылка не работает. Пожалуйста, дайте мне действующую ссылку. - person ved; 05.05.2015
comment
@ved ссылка теперь должна работать; если нет, попробуйте этот: cwiki.apache.org/confluence/download /attachments/7045154/ или найдите тип спецификации языка выражений jsp: pdf - person Bewusstsein; 05.05.2015