Использование переменной JavaScript в JSTL / JSP [duplicate]

Другая альтернатива:

  & 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}  
9
задан coder247 22 July 2010 в 10:41
поделиться

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 в браузере.

17
ответ дан Marimuthu Madasamy 16 August 2018 в 11:10
поделиться

Маримуту прибил его. 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");  }}  

См. также:

4
ответ дан BalusC 16 August 2018 в 11:10
поделиться

Это невозможно, потому что 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;  }  
6
ответ дан JoseK 16 August 2018 в 11:10
поделиться
  • 1
    не будет работать должным образом. Это будет отображаться внутри функции для двух элементов: alert ('key1') var groupKey = 'key1' if (groupKey == group) {alert (& quot; key1 & quot;) var groupValue = & quot; value1 & quot; if (groupValue == tvalue) {alert ("both are equal")}} alert ('key2') var groupKey = 'key2' if (groupKey == group) {alert ("key2") var groupValue = & quot; ; значение2 & Quot; if (groupValue == tvalue) {alert («оба равны»)}} Много объявлений переменных с одним и тем же именем и много кода JavaScript с избыточным «if's для клиентской стороны» – Marimuthu Madasamy 22 July 2010 в 12:30
  • 2
    @Marimuthu благодарит за выделение. +1 за ваш ответ. – JoseK 23 July 2010 в 09:37
Другие вопросы по тегам:

Похожие вопросы: