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


Answers:


521

是的,但是笨拙,例如

<c:choose>
  <c:when test="${condition1}">
    ...
  </c:when>
  <c:when test="${condition2}">
    ...
  </c:when>
  <c:otherwise>
    ...
  </c:otherwise>
</c:choose>

5
除了wrapper标记(选择)之外,我没有看到它比if / elseif / else更加冗长。一个包装标签很难构成“笨拙的地狱”,不是吗?
史蒂文·贝尼特斯

19
@Steven:这是XML的本质。样板中的字符比实际逻辑中的字符更多。
skaffman 2011年

2
喔好吧。<c:if/>那时也可以设置相同的设置。
史蒂文·贝尼特斯

15
我知道我参加聚会有点晚了,但<c:otherwise>似乎有点冗长,是吗?
andronikus 2011年

6
用适当的缩进和笨拙开始嵌套逻辑,因为地狱似乎太好了描述。
亚当·托利

105

除了skaffman答案外,简单的if-else也可以像这样使用三元运算符

<c:set value="34" var="num"/>
<c:out value="${num % 2 eq 0 ? 'even': 'odd'}"/>

6
这是一个很好的答案,但在很大程度上取决于它的用处。
Mike LP

47

没有if-else,只有。

<c:if test="${user.age ge 40}">
 You are over the hill.
</c:if>

您可以选择在以下情况下使用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>

@iwxfer您好,您现在无法使用上面的链接,请更新,如果您能获得好的成绩,请明智地将其删除。
Ajay2707 '16

25

我只使用了两个if标签,以为我会添加一个答案,以防其他人使用它:

<c:if test="${condition}">
  ...
</c:if>
<c:if test="${!condition}">
  ...
</c:if>

尽管从技术上说if-else本质上不是本质上的问题,但是其行为是相同的,并且避免了使用choose标签的笨拙方法,因此,根据您的要求的复杂程度,这可能是更可取的选择。


1
考虑一下条件复杂且丑陋的情况,例如$ {not param.age gt 42和someOtherVar eq'foobar'}。您必须将条件存储到一个临时布尔变量中,以便可以执行!condition或编写该条件的逆函数。两者都很丑。“否则”语法是有保证的逆运算。
马特

3
确实,复杂的条件将需要局部变量或编写逆函数,但是这两个选项仍然有效。我澄清说,这取决于要求的复杂程度,即这种方法是否比choose标签更可取。
2016年

2
我同意这一点。如果只有一个,则使用mark_upup少一些,然后使用c:choose
javaMoca​​ '16

1
拥有<c:if test =“ $ {condition} == true”>和<c:if test =“ $ {condition == false}”>还有另一个好处。当变量为空(未初始化)时,都不执行任何分支,这很好。如果使用<c:choose>和<c:when>,则当变量为null时将执行false分支。
史蒂夫·斯蒂尔森

3

您必须使用以下代码:

<%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%>

<c:select>
            <option value="RCV"
                ${records[0].getDirection() == 'RCV' ? 'selected="true"' : ''}>
                <spring:message code="dropdown.Incoming" text="dropdown.Incoming" />
            </option>
            <option value="SND"
                ${records[0].getDirection() == 'SND'? 'selected="true"' : ''}>
                <spring:message code="dropdown.Outgoing" text="dropdown.Outgoing" />
            </option>
        </c:select>

-1

根据时间复杂度前景,这是一种很好且有效的方法。一旦获得真实条件,此后将不再检查其他任何内容。在多个If中,它将检查每个条件。

   <c:choose>
      <c:when test="${condtion1}">
        do something condtion1
      </c:when>
      <c:when test="${condtion2}">
        do something condtion2
      </c:when>
      ......
      ......
      ...... 
      .......

      <c:when test="${condtionN}">
        do something condtionn N
      </c:when>


      <c:otherwise>
        do this w
      </c:otherwise>
    </c:choose>
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.