【问题标题】:Can you use <c:otherwise> with <c:if> or only with <c:when>?您可以将 <c:otherwise> 与 <c:if> 一起使用还是仅与 <c:when> 一起使用?
【发布时间】:2014-02-22 23:09:00
【问题描述】:

我在 StackOverflow 中搜索了 &lt;c:if&gt;&lt;c:otherwise&gt; 并找到了一些信息,但并不完全是我想要的。 &lt;c:otherwise&gt; 似乎设计如下:

<c:choose>
    <c:when test="${somecondition}">
        <%-- do stuff --%>
    </c:when>
    <c:when test="${someothercondition}">
        <%-- do other stuff --%>
    </c:when>
    <c:otherwise>
        <%-- do other other stuff --%>
    </c:otherwise>
</c:choose>

(基本上就像一个 switch 语句)。

但是,我发现的其他问题都无法明确告诉我这是否是您使用 &lt;c:otherwise&gt; 的唯一方法(尽管它们似乎暗示了这一点)。可以吗

<c:if test="${somecondition}">
        <%-- do stuff --%>
</c:if>
<c:otherwise>
    <%-- do other stuff --%>
</c:otherwise>

(如 if/else)或者这是错误的?

(请检查我的标签。我必须同时使用/学习 JSP、Javascript 和 JQuery,因此有时会混淆哪种新事物是哪种新语言。)

【问题讨论】:

  • @XtremeBiker 这是我看过的问题之一。答案说在 if/else 类型语句中使用选择/何时/否则,但不清楚这是 一种实现方式还是唯一实现方式。它没有回答我在标题中提出的问题。
  • 看我的回答,我觉得很合适;-)

标签: javascript jsp jsf jstl jsp-tags


【解决方案1】:

没有&lt;c:choose /&gt;,您将无法使用它。 JSTL 区别于简单的条件标记和条件块执行:

if标签允许根据test属性的值有条件地执行其主体。

选择标签通过嵌入的when子标签执行条件块执行。它呈现测试条件评估为真的第一个 when 标记的主体。如果nested when tags 的测试条件都不为真,那么如果存在,则评估 else 标记的主体。

所以你肯定需要一个条件块 (&lt;c:choose /&gt;) 才能使用&lt;c:otherwise /&gt;

另请参阅:

【讨论】:

  • 您提供的链接似乎表明条件标签是流控制标签的子类型。我读错了吗?它还将 both ifchoose 定义为 both 流标签和条件标签。它似乎做出的主要区别在于条件标签(if 和choose)和迭代器标签之间,所以我不确定你为什么将它链接起来以向我展示if 和choose 之间的区别。也许我错过了什么?
  • 对不起,我看错了,if 标签执行一个独特的测试,基于它执行它的主体。相反,choose 执行条件块执行。不同之处在于第一个只允许单个条件,而第二个是整个条件块。所以otherwise 只进入区块;-) 会更新答案
猜你喜欢
  • 1970-01-01
  • 2011-07-02
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多