Comment utiliser si, d'autre condition dans jsf pour afficher l'image

J'ai une condition où j'ai un formulaire d'inscription dans lequel si userid est 0 Il devrait montrer l'image factice et quand j'édite l'utilisateur de n'importe quelle mise à jour, je vérifie si userid qui n'est pas égal à 0 puis affiche l'image correspondant à userid.

J'ai utilisé JSTL dans la page jsf. Mais toujours il essaie d'aller à la boucle else pour montrer l'image. La fonctionnalité fonctionne bien. La seule chose est que je ne peux pas afficher l'image factice lorsque je visite la page en premier. S voici mon code.:

<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>

Peut J'utilise cette balise JSTL ou Puis-je le faire en utilisant jsf?

26
demandé sur BuZZ-dEE 2013-07-11 11:19:31

3 réponses

Il est illégal d'imbriquer des expressions EL: vous devez les intégrer. L'utilisation de JSTL est parfaitement valide dans votre situation. En corrigeant l'erreur, vous ferez fonctionner le code:

<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>

Une autre solution consiste à spécifier toutes les conditions que vous voulez dans un EL d'un élément. Bien qu'il puisse être plus lourd et moins lisible, le voici:

<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>
31
répondu skuntsel 2014-09-19 15:29:34

Pour ceux comme moi qui viens de suivre le code par skuntsel et a reçu une trace de pile cryptique, permettez-moi de vous faire gagner du temps.

Il semble que c:if ne puisse pas être suivi par c:otherwise.

La solutioncorrecte est la suivante:

<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>

Vous pouvez ajouter des tests c:when supplémentaires si nécessaire.

37
répondu jmkgreen 2014-04-02 09:19:22

Au lieu d'utiliser les balises "c", vous pouvez également faire ce qui suit:

<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}"/>

Je pense que c'est une alternative un peu plus lisible à la réponse alternative de skuntsel et utilise L'attribut Rendu JSF au lieu d'imbriquer un opérateur ternaire. Et hors de la réponse, vouliez-vous éventuellement mettre votre image entre les balises d'ancrage pour que l'image soit cliquable?

6
répondu Ryan D 2015-09-03 17:19:47