【问题标题】:How to use if-else option in JSTL如何在 JSTL 中使用 if-else 选项
【发布时间】:2011-06-03 00:15:33
【问题描述】:

JSTL 中有 if-else 标签吗?

【问题讨论】:

标签: jsp jstl


【解决方案1】:

除了需要 else 之外,在许多情况下,您还需要在多个位置使用相同的条件。

我更喜欢将条件提取到变量中:

<c:set var="conditionVar" value="#{expression}"/>

然后,您可以根据需要多次使用条件变量:

...
<c:if test="#{conditionVar}">
       ...
</c:if>
<c:if test="#{!conditionVar}">
       ...
</c:if>
...
<c:if test="#{conditionVar}">
       ...
</c:if>
<c:if test="#{!conditionVar}">
       ...
</c:if>
...

c:choose 元素适用于更复杂的情况,但如果您只需要 if else,我认为这种方法更好。它高效且具有以下优点:

  • 如果变量名选择得当,可读性会更好
  • 更可重用,因为提取了条件并生成了 变量可以用于其他 if 和其他表达式。它不鼓励多次编写相同的条件(并对其进行评估)。

【讨论】:

    【解决方案2】:

    根据时间复杂度的前景,这是一种很好且有效的方法。一旦它得到一个真实的条件,它就不会在此之后检查任何其他的。在多个 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>
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 这是一个很好的答案,但它的用处高度取决于情境。
      【解决方案4】:

      你必须使用这个代码:

      &lt;%@ taglib prefix="c" uri="http://www.springframework.org/tags/form"%&gt;

      <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>
      

      【讨论】:

        【解决方案5】:

        没有 if-else,只是 if。

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

        您可以选择使用选择时:

        <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,你上面的链接现在不可用,请更新,如果你能获得好分数,否则删除它。
        【解决方案6】:

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

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

        虽然技术上不是 if-else 本身,但行为是相同的,并且避免了使用 choose 标记的笨拙方法,因此根据您的要求有多复杂,这可能是更可取的。

        【讨论】:

        • 考虑条件复杂且丑陋的情况,例如 ${not param.age gt 42 和 someOtherVar eq 'foobar'}。您必须将条件存储到一个临时布尔变量中,以便您可以执行!条件,或编写该条件的倒数。都丑。 “否则”语法是有保证的。
        • 确实,一个复杂的条件要么需要一个局部变量,要么需要写一个逆向变量,但是这两个选项仍然有效。我澄清说,这取决于要求的复杂程度,即这种方法是否比choose 标签更可取。
        • 我同意这一点。如果你只有一个,那么使用 c:choose
        • 拥有 的另一个好处。当变量为null(未初始化)时,两个分支都不执行,这很好。如果你使用 ,当变量为 null 时会执行 false 分支。
        【解决方案7】:

        是的,但它很笨重,例如

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

        【讨论】:

        • 除了包装标签(选择)之外,我看不出这比 if/elseif/else 更冗长。一个包装标签几乎不会构成“笨拙的地狱”,不是吗?
        • @Steven:这是它的 XML 特性。样板文件中的字符比实际逻辑中的字符多。
        • 我知道我参加聚会有点晚了,但&lt;c:otherwise&gt; 似乎有点冗长,嗯?
        • 以适当的缩进开始嵌套逻辑,并且笨拙的描述似乎太客气了。
        • 仍然可以使用普通的旧 java 语法。我知道我会因此而被讨厌,但 el 绝不是强制性的。它旨在提高可读性并强制将逻辑和 UI 分离,但它通常不具有更高的可读性,其余的都是关于纪律的。
        猜你喜欢
        • 2015-01-26
        • 2011-08-21
        • 2013-08-23
        • 1970-01-01
        • 2013-10-30
        • 2019-04-25
        • 2014-04-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多