Другая альтернатива:
& gt; & gt; & gt; & gt; & gt; mydict = {'a': 1, 'b': 2, 'c': 3} & gt; & gt; & gt; & gt; import json
Затем с python2:
& gt; & gt; & gt; & gt; print json.dumps (mydict, indent = 4, sort_keys = True) # python 2 {"a": 1, "b": 2, "c": 3}
или с python 3:
& gt; & gt; & gt; & gt; & gt; print (json.dumps (mydict, indent = 4, sort_keys = True)) # python 3 {"a": 1, "b": 2, "c": 3}
"для итерации HashMap в javascript с помощью jstl" - Невозможно
JSTL выполняется на стороне сервера вашим контейнером сервлета, для которого Javascript - это просто текст, который будет пропущен, тогда как JavaScript выполняется на клиенте где JSTL неизвестен. После того, как сервер завершит обработку JSTL, будет создан сгенерированный HTML (если есть) из JSTL вместе с другим JavaScript / HTML.
Например, если у вас есть это,
& lt; c: forEach var = "myItem" items = "$ {myCollection}" & gt; alert ('& lt; c: out value = "$ {myItem.id}" & gt;') & lt; c: if test = "$ {myItem.id == 0}" & gt; предупреждение ( "ноль"); & Lt; / с: если & GT; & Lt; / с: Foreach & GT;
Если идентификаторы компонентов в наборе равны 0, 1, 2, сервер делает следующее на стороне клиента, выполнив вышеуказанный код,
alert ('0') alert ('zero') alert ('1') alert ('2')
Теперь браузер предоставит вам 4 предупреждения при загрузке страницы ( что, если у вас есть 10000 элементов, вы будете отображать 10000 предупреждений в браузер). Итак, дело в том, что вы не повторили Java-сборку в JavaScript, вы просто сгенерировали серьезные заявления Javascript на сервере, итерации коллекции с использованием JSTL, и вы предоставили эти Javascript-инструкции вместе с другим содержимым html в браузере.
Маримуту прибил его. JavaScript и JSP / JSTL не синхронизируются, как вы ожидали бы от заказа в кодировке. Сначала Java / JSP обрабатывает страницу сверху вниз, затем веб-сервер отправляет результат HTML / CSS / JS в webbrowser, и, наконец, webbrowser обрабатывает страницу (не содержащую строку Java / JSP!) Сверху вниз. [ ! d12]
Лучшее решение - позволить JSP / JSTL генерировать переменную объекта JavaScript, доступ к которой вы можете получить позже в JS-коде.
var groupMap = {& lt; c: forEach items = "$ {configureGroupMap}" var = "groupMap" varStatus = "loop" & gt; "$ {groupMap.key}": "$ {groupMap.value}" $ {! loop.last? ',': ''} & lt; / c: forEach & gt; };
Это будет выглядеть следующим образом на стороне клиента (правильно щелкните страницу View Source )
var groupMap = {"key1": "value1", "key2": "value2", "key3": "value3"};
Наконец, перепишите checkSelection ()
следующим образом:
function checkSelection (group, tvalue) {if (groupMap [group] == tvalue) {alert ("equal"); }}
Это невозможно, потому что JSP выполняется сначала на стороне сервера, затем JavaScript выполняется на стороне клиента.
Вы все равно можете использовать c: forEach
для запустите $ {configureGroupMap}
, но вы не можете выполнить сравнение по groupMap.key
и группе
напрямую.
Вместо этого решением в этом случае является назначение серверной стороне groupMap.key
стороне клиентской переменной в javascript. Затем используйте javascript для проверки if, а не c: if
.
Я изменил ваш пример ниже
function checkSelection (группа , tvalue) {alert (group); оповещения (TValue); & lt; c: forEach items = "$ {stringshm}" var = "groupMap" & gt; alert ("& lt; c: out value =" $ {groupMap.key} "/ & gt;"); var groupKey = "& lt; c: out value =" $ {groupMap.key} "/ & gt;"; if (groupKey == group) {alert ("& lt; c: out value =" $ {groupMap.key} "/ & gt;"); var groupValue = "& lt; c: out value =" $ {groupMap.value} "/ & gt;"; if (groupValue == tvalue) {alert ("оба равны"); }} & lt; / c: forEach & gt; }