2014-04-05 2 views
-1

У меня есть страница JSP. На этой странице я пытаюсь использовать атрибуты области страницы, используя теги jstl и struts2. Следующий фрагмент кода,EL не работает на странице jsp

 <%@ taglib uri="/struts-tags" prefix="s" %> 
     <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

     <c:set var="test" value="ramesh"/> 
     <c:set var="test1" value="${test}"/> 
     <s:set var="test2" value="${test}" /> 

<s:set> тег дает следующее исключение «В соответствии с TLD или атрибута директивы в файле тегов, значение атрибута не принимает каких-либо выражений».

У меня есть два вопроса.

1) ${test} работает, когда используется в <c:set> тег.

2) ${test} не работает, если используется в <s:set> тег. Зачем?

+0

Потому что * значение атрибута не принимает никаких выражений *. –

+0

@Aleksandr, но почему работает. – reddy

+0

Очевидно, что '' принимает выражения. –

ответ

1

EL и JSTL теперь соответствуют стандартам Java EE, поэтому они могут хорошо сотрудничать, я думаю.

Однако, если в struts 2 тегах, потому что struts 2 имеют свой язык выражения - OGNL, , поэтому я думаю, что они предпочитают использовать OGNL для EL в своих тегах, и именно по этой причине они не поддерживают EL. Это моя догадка.

0

От Apache ссылки

From Apache FAQ link

По Struts версии 2.0.9 JSTL/JSP языка выражения (EL) был отключен для Struts теги атрибуты, которые оценивают OGNL. Это предостережение от уязвимостей безопасности, которые могут возникнуть в результате двойной оценки, которая возникает, когда атрибут сначала обрабатывается как выражение EL JSTL/JSP, а затем результат обрабатывается как выражение OGNL. Решение состоит в том, чтобы выразить все динамические значения атрибутов в тегах Struts напрямую с помощью выражений OGNL.

Смежные вопросы