Подтвердить что ты не робот

Доступ к переменной jstl внутри скрипта

Следующий код вызывает ошибку:

       <c:set var="test" value="test1"/>
      <%
        String resp = "abc"; 
        resp = resp + ${test};  //in this line I got an  Exception.
        out.println(resp);
       %>

Не использовать ли язык выражения "$ {test}" в scriptlet.why?

4b9b3361

Ответ 1

JSTL переменные на самом деле являются атрибутами, и по умолчанию они ограничены уровнем контекста страницы.
В результате, если вам нужно получить доступ к значению переменной JSTL в скриптлете, вы можете сделать это, вызвав метод getAttribute() соответствующим образом (обычно pageContext и запрос).

resp = resp + (String)pageContext.getAttribute("test"); 

Полный код

 <c:set var="test" value="test1"/>
 <%
    String resp = "abc"; 
    resp = resp + (String)pageContext.getAttribute("test");   //No exception.
    out.println(resp);
  %>  

Обновить

Но почему это исключение приходит ко мне.

A JSP scriptlet используется для содержания любого фрагмента кода, который действителен для языка сценариев, используемого на странице. Синтаксис для скриптлета выглядит следующим образом:

<%
   scripting-language-statements
%>

Когда язык сценариев установлен в java, скриптлет преобразуется в фрагмент инструкции языка программирования Java и вставляется в сервисный метод сервлета страниц JSP.

В сценариях вы можете написать Java-код и ${test} в не Java-коде.


Не связано

Ответ 2

Содержимое вашего кода сценария (внутри <% %>) - это фрагмент кода Java-кода, который должен быть помещен в переведенный сервис службы сервлетов (JSP переведены в классы сервлетов). Там может быть установлен только действительный синтаксис java, поэтому вы не можете использовать язык выражения. Если вы хотите добавить две строки в JSP, первыми были константы "abc", а вторая - значение некоторого EL, вы можете просто использовать

abc${test}

Если вы хотите сохранить результат в переменной скрипта, следуйте ответам от Aniket (хотя мой совет - вообще избегать сценариев).