我想知道以下代码是否有效?我正在从事一个项目,我来自非Java背景。我是否需要将<c:otherwise>
与<c:choose>
括起来?非常感谢您的所有帮助。
<c:choose>
<c:when test="${empty example1}">
</c:when>
<c:otherwise>
<c:when test="${empty example2}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:otherwise>
</c:choose>
答案 0 :(得分:2)
@Marvo钉了它。 JSTL 1.2 spec表示c:choose
必须是至少一个c:when
语句的父级,c:when
必须始终在至少一个c:otherwise
语句之前直接的父母。从本质上讲,这也意味着每个c:when
必须在c:otherwise
内跟随c:choose
,而c:choose
必须包围任何c:when
+} + c:otherwise
。从我所看到的,规范没有引用嵌套c:choose
元素,所以你必须尝试。
@EJP是正确的,c:choose
通常可以翻译成Java switch
,但是有区别。 Java开关不要求在条件内具有互斥语句,而c:choose
条件是。c:when
条件。我们知道如果满足条件,c:when
内的任何内容都将被执行,然后在c:choose
元素中不会出现其下面出现的其他switch
语句。我们不一定对Java case
语句说同样的内容(尽管首选样式通常是互斥的switch
语句)。
假设一个人13岁或14岁,我们想给他们发一张生日卡。如果他们是15或17,我们希望向他们发送生日短信。如果他们是16或18(特殊生日),我们希望向他们发送卡片和文本。下面的代码可以实现这一点,并且它是一个switch (age) {
case 16: // falls through (executes case 18)
case 18: sendBirthdayCard();
sendBirthdayText();
break;
case 13: // falls through (executes case 14)
case 14: sendBirthdayCard();
break;
case 15: // falls through (executes case 17)
case 17: sendBirthdayText();
break;
default: System.out.println("You are under 13 or over 18 years old.");
}
,如果满足特定条件,可以执行多个case语句:
{{1}}
答案 1 :(得分:0)
我不相信。但即使是这样,您也可以指定多个“when”子句。你会得到与我认为更具可读性相同的效果:
<c:choose>
<c:when test="${empty example1}">
</c:when>
<c:when test="${empty example2}">
</c:when>
<c:otherwise>
</c:otherwise>
</c:choose>
答案 2 :(得分:0)
您可以将此构造视为c:choose
是Java switch
; c:when
是Java case
; c:otherwise
是一个Java default
。