如何在JSTL中使用if-else选项

Sri*_*san 317 jsp jstl

JSTL中是否有if-else标签?

ska*_*man 509

是的,但它很笨重,例如

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)

  • @Steven:这是它的XML特性.样板中的字符数多于实际逻辑中的字符数. (19认同)
  • 我知道我参加派对有点晚了,但是`<c:otherwise>`似乎有点冗长,是吗? (15认同)
  • 开始使用适当的缩进嵌套逻辑并且笨重,因为它看起来太善意了. (6认同)
  • 除了包装标签(选择)之外,我没有看到它比if/elseif/else更加冗长.一个包装标签几乎不构成"笨拙的地狱",不是吗? (5认同)
  • 喔好吧.同样可以为`<c:if />`设置. (2认同)
  • 人们仍然可以使用普通的旧java语法.我知道我会因此而讨厌,但el绝不是强制性的.它意味着更具可读性并强制实现逻辑和UI的分离,但它往往不具有可读性,其余部分则与纪律相关. (2认同)

lak*_*sys 102

对于简单的if-else,您可以使用这样的三元运算符

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但对于它的实用程度非常有用. (6认同)

小智 45

没有if-else,只是如果.

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>
Run Code Online (Sandbox Code Playgroud)

您可以选择使用choose-when:

<c:choose>
  <c:when test="${a boolean expr}">
    do something
  </c:when>
  <c:when test="${another boolean expr}">
    do something else
  </c:when>
  <c:otherwise>
    do this when nothing else is true
  </c:otherwise>
</c:choose>
Run Code Online (Sandbox Code Playgroud)


jon*_*onk 23

我只是使用两个if标签就逃之遥了,以为我会添加一个答案,以防它对任何人使用:

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>
Run Code Online (Sandbox Code Playgroud)

虽然技术上并非if-else本身,但行为是相同的,并且避免了使用choose标签的笨重方法,因此根据您的要求的复杂程度,这可能更为可取.

  • 实际上,复杂的条件需要局部变量或写入反向,但这两个选项仍然有效.我澄清说,这将取决于这个方法是否比"choose"标签更优选的要求有多复杂. (3认同)
  • 考虑条件复杂且难看的情况,例如 ${not param.age gt 42 and someOtherVar eq 'foobar'}。您必须将条件存储到临时布尔变量中,以便您可以执行 !condition 或编写该条件的反函数。两个都丑。“否则”语法是有保证的逆语法。 (2认同)
  • 我同意这一点.如果你只有一个其他的,那么它的市场营销就会少于c:选择 (2认同)