登録フォームがあり、ユーザーIDが0の場合、ダミーイメージを表示する必要があり、更新からユーザーを編集するときに、0以外のユーザーIDをチェックしてから、ユーザーIDに対応するイメージを表示するという条件があります。
Jsfページ内でJSTLを使用しました。ただし、常にイメージを表示するためにelseループに移動しようとします。機能は正常に動作しています。唯一のことは、最初にページにアクセスしたときにダミー画像を表示できないことです。ここに私のコードがあります。
<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を使用して実行できますか?
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>
別の解決策は、1つの要素の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>
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
テストを追加できます。
「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レンダリング属性を利用していると思います。そして答えから外れて、画像がアンカータグの間に置かれ、画像がクリック可能になったのでしょうか?