Использование сервлетов Java и атрибутов страницы с jQuery и javascript - PullRequest
1 голос
/ 22 октября 2010

В настоящее время я использую сервлеты Java для настройки хэш-карт, списков и диапазона бизнес-объектов, а затем передаю их на страницу jsp через request.setAttribute("myMap", myMap);

Как я могу напрямую получить доступ к этим данным в javascript / jquery?Какой синтаксис?

В данный момент я использую выражения jstl и EL для циклического прохождения данных и установки значений элементов dom.

<c:forEach var="entry" items="${myMap}">
<input type="hidden" class="myClass" value='<c:out value="${entry.value}" />' />
</c:forEach>

Затем я использую javascript / jquery для доступа к этим элементам DOM.

$(".myClass").eq(1).val()
$(".myClass").eq(2).val()

Это способ, которым я могу напрямую получить доступ, используя javascript / jQuery, атрибуты страницы, которые установленыв сервлете без предварительного создания элементов DOM?

Ответы [ 2 ]

2 голосов
/ 22 октября 2010

Я бы предпочел сбросить его в ассоциативный массив JavaScript:

<script type="text/javascript">
    var map = new Array();
    <c:forEach ... >
       map['${entry.key}'] = '${entry.value}';
    </c:forEach>
</script>
0 голосов
/ 22 октября 2010

Как примечание, одна из вещей, о которых вам нужно беспокоиться при использовании JSP для генерации Javascript, это то, что из коробки не предусмотрено средства для «санации» текста для этого контекста.В частности, в этом примере, если вы хотите поместить ${entry.value} в строку Javascript:

var someValue = '${entry.value}';

, вы должны убедиться, что значение будет правильно проанализировано как строка Javascript.Что определенно НЕ будет работать:

var someValue = '${fn:escapeXml(entry.value)}';

Почему бы и нет?Потому что fn:escapeXml() предназначен для очистки строк, чтобы синтаксический анализатор XML или HTML не видел метасимволов в строках.У XML и HTML есть свои особенности, и они просто полностью отличаются от синтаксиса Javascript.Например, амперсанд внутри строковой константы Javascript - это просто амперсанд.Однако в нашем примере здесь, если ${entry.value} - это имя вашего ирландского дяди, то при расширении у нас будет:

var someValue = 'John O'Hara';

, и это синтаксическая ошибка Javascript.

Длянасколько мне известно, в JSTL / EL еще нет стандартизированного преобразователя JSON.Захват одного из множества доступных наборов инструментов JSON (все со своими плюсами и минусами) и привязка его к собственной функции EL - один из подходов к решению этой проблемы.Другой, более простой подход - просто написать свой собственный вариант fn:escapeXml() с целью «экранирования» строк Javascript.Следует беспокоиться о кавычках, семействе специальных управляющих символов, таких как символы новой строки и возврата, символ обратной косой черты и символы Юникода вне 7-битного диапазона.С этим можно спокойно написать:

var someValue = '${yourTld:escapeJS(entry.value)}';

и быть уверенным, что сгенерированный текст будет выглядеть примерно так:

var someValue = 'John O\'Hara';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...