JSTL внутри JavaScript - PullRequest
       4

JSTL внутри JavaScript

10 голосов
/ 08 ноября 2010

Возможно ли использовать jstl внутри javascript?

Я пытаюсь установить <c:set var="abc" value="yes"/>

, а затем получить доступ к этому значению в html и выполнить некоторый код. Моя проблема в том, что c: set выполняется всегда, даже если условие javascript ложно.

<script type="text/javascript">
var v1 = false;
<c:set var"abc" value="yes"/>

if(v1){
  <c:set var"abc" value="no"/>
}
</script>

В приведенном выше коде, даже если v1 имеет значение false, «no» устанавливает значение abc.

Ответы [ 3 ]

21 голосов
/ 08 ноября 2010

Нет смысла в идее быть «внутри Javascript», когда вы говорите о интерпретации JSP на стороне сервера. Javascript просто не существует в том, что касается этого домена.

Таким образом, да, это возможно, если вы имеете в виду, что вы хотите сделать что-то вроде

var something = '${abc}';

Обратите внимание, что вы должны быть осторожны с цитатами и специальными символами. Функция JSTL fn:escapeXml() бесполезна, когда вы интерполируете переменную JSP в часть страницы, которая будет интерпретироваться браузером как источник Javascript. Вы можете использовать библиотеку JSON для кодирования ваших строк или написать собственную EL-функцию для этого.

4 голосов
/ 15 ноября 2013

Это довольно старая тема, но я столкнулся с ней, когда у меня возникла та же проблема.Поскольку я сам думал о решении, я опубликую его здесь на случай, если оно кому-нибудь поможет в будущем.

Файл html (или jsp) ищет текст во внешнем файле, объявленном как источник javascript.

Tomcat (или аналогичный) интерпретирует только теги JSTL в файлах с расширением .jsp (или, возможно, некоторых других, но это не имеет отношения к этому ответу).

Итак, переименуйте ваш файл .jsчтобы дать ему расширение .jsp (например, javascript.js для javascript_js.jsp)

Добавьте эти строки вверху javascript_js.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

и просто оставьте кодбез изменений.

Очевидно, что вам также нужно добавить больше префиксов, если вы используете в заголовке некоторые отличные от c :.

Если вы используете Eclipse (не знаю о других IDE), онбудет предполагать, что это не файл javascript, и вы потеряете цветовую схему для различных ключевых слов (var, function и т. д.), автозаполнения имени var и автоматического отступа.

Чтобы обмануть IDE, вы можете добавить

// <script> 

как комментарий js, перед фактическим кодом (после объявлений "<% @"), и </p>

// </script>

в конце файла, снова как комментарий js.

У меня это сработало.

3 голосов
/ 27 февраля 2015
<script>
    <c:set var="myVal" value="Hello"/> 

    var val1="${myVal}";

</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...