Я должен написать ссылку с изображением внутри. Вместо объяснения вот код, который у меня сейчас есть:
<c:if test="${userSession.loggedUser eq null and company.image != null}">
<a onclick="${rich:component('loginPanel')}.show()">
<img src="/download.do?hash=#{company.image.hash}" />
</a>
</c:if>
<c:if test="${userSession.loggedUser eq null and company.image == null}">
<a onclick="${rich:component('loginPanel')}.show()">
<img src="${request.contextPath}/img/icons/logo_default.jpg" />
</a>
</c:if>
<c:if test="${userSession.loggedUser ne null and company.image != null}">
<a href="company.xhtml?${company.name}">
<img src="/download.do?hash=#{company.image.hash}" />
</a>
</c:if>
<c:if test="#{userSession.loggedUser ne null and company.image == null}">
<a href="company.xhtml?${company.name}">
<img src="${request.contextPath}/img/icons/logo_default.jpg" />
</a>
</c:if>
Этот код выглядит ужасно - есть две точные ссылки с двумя точными изображениями, но объединенные во всех возможных комбинациях. Есть ли способ лучше?
Есть ли способ избежать c: if - он создал таблицы?
Обновление : Божо предлагает:
Вы можете заменить <c:if
и <a
на <h:outputLink rendered="#{..}"
. Кроме этого я не вижу никакой другой оптимизации.
Но это не работает. Это не правильно отображать:
<a href=>
<h:outputLink rendered="#{..}
<h:outputLink rendered="#{..}
</a>
(изображение находится вне якоря)
Это действительно хорошо:
<h:outputLink value=>
<h:outputLink rendered="#{..}
<h:outputLink rendered="#{..}
</a>
, но всегда добавляет href, и в двух случаях я не хочу href при рендеринге.
Update2 : у меня тоже их было 2 на 2:
<c:if>
<a href...>
<c:if><img...></c:if>
<c:if><img...></c:if>
</a>
</c:if>
<c:if>
<a onclick...>
<c:if><img...></c:if>
<c:if><img...></c:if>
</a>
</c:if>
Это также не отображается правильно - <a
не окружает изображения по какой-то сумасшедшей причине.