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