Jsf c:通过多个c:when-fall-through开关选择
如果我的jsf页面上有以下代码:Jsf c:通过多个c:when-fall-through开关选择,jsf,loops,jstl,break,Jsf,Loops,Jstl,Break,如果我的jsf页面上有以下代码: <c:choose> <c:when test="${empty example1}"> </c:when> <c:when test="${empty example2}"> </c:when> <c:otherwise> </c:otherwise> </c:choose> 它将像javaswit
<c:choose>
<c:when test="${empty example1}">
</c:when>
<c:when test="${empty example2}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
它将像javaswitch
语句一样使用case
和break
——如果第一个为true,第二个将不会被测试,对吗
我应该写些什么来获取“switch
语句,其中包含case
,但不包含break
”:
当第一个
C:when
为真,第二个为真,页面上也会添加一些内容我认为使用C:when
是不可能的。您可以改用c:if
:
<c:if test="${empty example1}">
"example1 empty"
</c:if>
<c:if test="${empty example2}">
"example2 empty"
</c:if>
<c:if test="${not empty example1 and not empty example2}">
"both not empty"
</c:if>
“示例1为空”
“示例2为空”
“两者都不是空的”
因此,您基本上是在寻找一个直通开关。这在
中是不可能的,因为它代表了一个真正的if else…
。JSTL不为直通式开关提供任何标记
您最好使用多个
s,其中您还将前面的条件检查为或条件
<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>
...
不同之处在于,它是在视图渲染时计算的,而不是在视图生成时计算的。因此,例如,如果您在基于当前迭代行的
中使用此函数,
将不会以您期望的方式工作。另见
要消除条件检查样板,可以使用
创建新的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>
...
...
...
...
...
<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>
...