したがって、基本的にフォールスルースイッチを探しています。<c:choose>
true を表すため、これは不可能ですif-else...
。JSTL はフォールスルー スイッチのタグを提供しません。
あなたの最善の策は<c:if>
、条件として前の条件もチェックする複数のを使用するor
ことです。
<c:if test="#{empty example1}">
...
</c:if>
<c:if test="#{empty example1 or empty example2}">
...
</c:if>
<c:if test="#{empty example1 or empty example2 or empty example3}">
...
</c:if>
...
JSF を使用しているため、代替手段はコンポーネントのrendered
属性を使用することです。
<h:panelGroup rendered="#{empty example1}">
...
</h:panelGroup>
<h:panelGroup rendered="#{empty example1 or empty example2}">
...
</h:panelGroup>
<h:panelGroup rendered="#{empty example1 or empty example2 or empty example3}">
...
</h:panelGroup>
...
違いは、ビューのビルド時ではなく、ビューのレンダリング時に評価されることです。したがって、たとえば<h:dataTable>
、現在反復されている行に基づいてこれを使用し<c:if>
ていた場合、期待どおりに機能しませんでした。JSF2 FaceletsのJSTLも参照してください...理にかなっていますか?
条件チェックのボイラープレートをなくすために、 を使用<c:set>
して新しい EL 変数を作成できます。これは両方のアプローチで機能します。
<c:set var="show1" value="#{empty example1}" />
<c:set var="show2" value="#{show1 or empty example2}" />
<c:set var="show3" value="#{show2 or empty example3}" />
<h:panelGroup rendered="#{show1}">
...
</h:panelGroup>
<h:panelGroup rendered="#{show2}">
...
</h:panelGroup>
<h:panelGroup rendered="#{show3}">
...
</h:panelGroup>
...