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

Posted

技术标签:

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

JSTL 中有 if-else 标签吗?

【问题讨论】:

if...else within JSP or 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 分离,但它通常不具有更高的可读性,其余的都是关于纪律的。

以上是关于如何在 JSTL 中使用 if-else 选项的主要内容,如果未能解决你的问题,请参考以下文章

jstl

如何在标准 Bigquery 中使用 if-else 语句?

使用 JSTL 设置 HTML 下拉选择选项

我应该如何在 awk 中使用 if-else 语句?

如何在 if-else 条件下的列中使用 Spark 值 - Scala

如何在 JSP 或 JSTL 中获取页面名称?