атрибут теста в JSTL

Дон

Я видел некоторые код, как следующее в JSP

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

Моя путаница над "я", который появляется в значении test attribute. My understanding was that anything included within атрибут. Насколько я понимаю, что все, что включено в <%= %> is printed to the output, but surely the value assigned to test must be a Boolean, so why does this work? печатается на выходе, но, безусловно, значение, назначенное для тестирования должно быть Boolean, так почему же эта работа?

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

Cheers,

Ответ на: "атрибут теста в JSTL"

Количество ответов:5
Атрибуты

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

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

Зтл;%'%gt; сам по себе будет отправлен на выход, в контексте JSTL он будет оценен на строку

Выражение между "lt;%" % Таким образом, предполагая, что «запрос.isUserInRole» возвращает «истинно», ваш пример будет оценен сначала:

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

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

Все, что test attribute looks for to determine if something is true is the string "true" (case in-sensitive). For example, the following code will print "Hello world!" атрибут ищет, чтобы определить, если что-то верно строка "истинный" (дело в чувствительных). Например, следующий код будет печатать "Здравствуйте, мир!"

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

Код в <%= %> returns a boolean, so it will either print the string "true" or "false", which is exactly what the возвращает булиана, поэтому он будет либо печатать строку "истинный" или "ложный", который является именно то, что <c:if> tag looks for. тег ищет.

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

<c:if test="${ testObject.testPropert == "testValue" }">...</c:if>