Вопрос

Я видел такой код в JSP

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

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

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

Ура, Дон

Это было полезно?

Решение

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

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

Код внутри <%= %> возвращает логическое значение, поэтому оно будет печатать строку либо «истина», либо «ложь», что именно то, что <c:if> тег ищет.

Другие советы

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top