J'ai une condition où j'ai un formulaire d'inscription dans lequel si userid est 0, il devrait montrer l'image factice et lorsque je modifie l'utilisateur à partir 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 à l'intérieur de la page jsf. Mais toujours, il essaye d'aller à la boucle else pour montrer l'image. La fonctionnalité fonctionne bien. Le seul problème est que je ne peux pas afficher l'image factice lorsque je visite d'abord la page. 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>
Puis-je utiliser cette balise JSTL ou le faire avec jsf?
Il est illégal d'imbriquer des expressions EL: vous devez les aligner. L'utilisation de JSTL est parfaitement valable 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 souhaitées dans un EL d'un élément. Bien que cela 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 qui, comme moi, viennent de suivre le code de skuntsel et ont reçu une trace de pile cryptique, permettez-moi de vous faire gagner du temps.
Il semble que c:if
Ne puisse pas à lui seul être suivi de c:otherwise
.
La solution correcte 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 procéder comme 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 en dehors de la réponse, aviez-vous éventuellement l'intention de placer votre image entre les balises d'ancrage afin qu'elle soit cliquable?