тестовый атрибут в теге JSTL <c: if> - PullRequest
14 голосов
/ 18 сентября 2008

Я видел некоторый код, подобный следующему в JSP

<c:if test="<%=request.isUserInRole(RoleEnum.USER.getCode())%>">
    <li>user</li>
</c:if>

Моя путаница связана с символом "=", который появляется в значении атрибута test. Насколько я понимаю, все, что включено в <%= %>, выводится на вывод, но, несомненно, значение, назначенное для test, должно быть логическим, так почему это работает?

Для бонусных баллов есть ли способ изменить указанное выше значение атрибута так, чтобы он не использовал код скриптлета? Предположительно, это означает использование EL вместо этого.

Ура, Дон

Ответы [ 5 ]

16 голосов
/ 18 сентября 2008

Все, что ищет атрибут test, чтобы определить, является ли что-то истинным, это строка "true" (без учета регистра). Например, следующий код выведет «Hello world!»

<c:if test="true">Hello world!</c:if>

Код в <%= %> возвращает логическое значение, поэтому он выводит либо строку "true", либо "false", что в точности соответствует тегу <c:if>.

11 голосов
/ 05 декабря 2008

Вы также можете использовать что-то вроде

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>
4 голосов
/ 18 сентября 2008

Выражение между <% =%> вычисляется перед тегом c: if. Итак, предположим, что | request.isUserInRole | возвращает | true |, ваш пример будет оценен первым:

<c:if test="true">
    <li>user</li>
</c:if>

, а затем будет выполнен тег c: if.

2 голосов
/ 18 сентября 2008

Атрибуты в библиотеках тегов JSP в целом могут быть статическими или разрешаться во время запроса. Если они разрешены во время запроса, JSP разрешит их значение во время выполнения и передаст выходные данные в тег. Это означает, что вы можете поместить практически любой код JSP в атрибут, и тег будет вести себя в соответствии с тем, что выводит.

Если вы посмотрите документы jstl taglib, вы увидите, какие атрибуты имеют время повторного тестирования, а какие - нет. http://java.sun.com/products/jsp/jstl/1.1/docs/tlddocs/index.html

0 голосов
/ 18 сентября 2008

<% =%> само будет отправлено на выход, в контексте JSTL оно будет оценено как строка

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