Как использовать if, else условие в jsf для отображения изображения
У меня есть условие, в котором у меня есть форма регистрации, в которой, если userid равно 0, он должен показывать фиктивное изображение, и когда я редактирую пользователя из любого обновления, я проверяю, если userid, который не равен 0, затем отображает соответствующее изображение для пользователя.
Я использовал JSTL внутри jsf-страницы. Но всегда он пытается перейти в другой цикл для показа изображения. Функциональность работает нормально. Единственное, что я не могу отобразить фиктивный образ, когда я впервые нахожусь на странице. Вот мой код.:
<c:if test="${'#{user.userId}' == '0'}">
<a href="Images/thumb_02.jpg" target="_blank" ></a>
<img src="Images/thumb_02.jpg" />
</c:if>
<c:otherwise>
<a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"</a>
<img src="/DisplayBlobExample?userId=#{user.userId}" />
</c:otherwise>
Можно ли использовать этот тег JSTL, или я могу сделать это с помощью jsf?
Ответы
Ответ 1
Неправильно вставлять выражения EL: вы должны их встроить. Использование JSTL отлично подходит для вашей ситуации. Исправляя ошибку, вы создадите код:
<c:if test="#{not empty user or user.userId eq 0}">
<a href="Images/thumb_02.jpg" target="_blank" ></a>
<img src="Images/thumb_02.jpg" />
</c:if>
<c:if test="#{empty user or user.userId eq 0}">
<a href="/DisplayBlobExample?userId=#{user.userId}" target="_blank"></a>
<img src="/DisplayBlobExample?userId=#{user.userId}" />
</c:if>
Другое решение - указать все условия, которые вы хотите использовать внутри элемента EL одного элемента. Хотя это может быть более тяжелым и менее читаемым, вот оно:
<a href="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></a>
<img src="#{not empty user or user.userId eq 0 ? '/Images/thumb_02.jpg' : '/DisplayBlobExample?userId='}#{not empty user or user.userId eq 0 ? '' : user.userId}" target="_blank"></img>
Ответ 2
Для таких, как я, который только что выполнил код skuntsel и получил криптографическую трассировку стека, позвольте мне сэкономить вам некоторое время.
Кажется, что c:if
не может следовать за c:otherwise
.
Правильное решение выглядит следующим образом:
<c:choose>
<c:when test="#{some.test}">
<p>some.test is true</p>
</c:when>
<c:otherwise>
<p>some.test is not true</p>
</c:otherwise>
</c:choose>
При необходимости вы можете добавить дополнительные тесты c:when
.
Ответ 3
Вместо использования тегов "c" вы также можете сделать следующее:
<h:outputLink value="Images/thumb_02.jpg" target="_blank" rendered="#{not empty user or user.userId eq 0}" />
<h:graphicImage value="Images/thumb_02.jpg" rendered="#{not empty user or user.userId eq 0}" />
<h:outputLink value="/DisplayBlobExample?userId=#{user.userId}" target="_blank" rendered="#{not empty user and user.userId neq 0}" />
<h:graphicImage value="/DisplayBlobExample?userId=#{user.userId}" rendered="#{not empty user and user.userId neq 0}"/>
Я думаю, что немного более читаемая альтернатива альтернативному ответу skuntsel и использует атрибут JSF rendered вместо того, чтобы вставлять тернарный оператор.
И от ответа, возможно, вы хотели разместить свое изображение между привязными тегами, чтобы изображение можно было щелкнуть?