Ответ 1
Вы должны понимать, что Java/JSP - просто производитель кода HTML/CSS/JS. Поэтому все, что вам нужно сделать, это просто позволить JSP напечатать переменную Java, как если бы она была переменной JavaScript, и чтобы сгенерированный вывод кода HTML/JS был синтаксически допустимым.
При условии, что переменная Java доступна в области EL с помощью ${foo}
, вот несколько примеров, как ее распечатать:
<script>var foo = '${foo}';</script>
<script>someFunction('${foo}');</script>
<div onclick="someFunction('${foo}')">...</div>
Представьте, что переменная Java имеет значение "bar"
, тогда JSP в конечном итоге сгенерирует этот HTML-код, который вы можете проверить, щелкнув правой кнопкой мыши по View Source в веб-браузере:
<script>var foo = 'bar';</script>
<script>someFunction('bar');</script>
<div onclick="someFunction('bar')">...</div>
Обратите внимание, что эти одинарные кавычки являются обязательными для представления строковой переменной в JS. Если вы использовали var foo = ${foo};
вместо этого он напечатал бы var foo = bar;
, которая может заканчиваться ошибкой "bar is undefined", когда вы пытаетесь получить к нему доступ ниже в коде JS (вы можете увидеть ошибки JS в консоли JS набора инструментов веб-разработчика браузера, которые можно открыть, нажав F12 в Chrome/[CN10 ]/IE9 +). Также обратите внимание, что если переменная представляет число или логическое значение, которое не нужно заключать в кавычки, то оно будет работать нормально.
Если переменная получена из контролируемого пользователем ввода, имейте в виду, что необходимо учитывать дыры XSS-атак и JS-экранирование. В нижней части нашей вики-страницы EL вы можете найти пример того, как создать пользовательскую функцию EL, которая экранирует переменную Java для безопасного использования в JS.
Если переменная немного сложнее, например, Java-бин или его список, или карта, то вы можете использовать одну из многих доступных библиотек JSON для преобразования объекта Java в строку JSON. Вот пример, предполагающий Gson.
String someObjectAsJson = new Gson().toJson(someObject);
Обратите внимание, что таким образом вам больше не нужно печатать его как строку в кавычках.
<script>var foo = ${someObjectAsJson};</script>