Подтвердить что ты не робот

Как использовать 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?

4b9b3361

Ответ 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 вместо того, чтобы вставлять тернарный оператор. И от ответа, возможно, вы хотели разместить свое изображение между привязными тегами, чтобы изображение можно было щелкнуть?