如何在 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】:你必须使用这个代码:
<%@ 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>
【讨论】:
【参考方案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
拥有 是的,但它很笨重,例如
<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 特性。样板文件中的字符比实际逻辑中的字符多。 我知道我参加聚会有点晚了,但<c:otherwise>
似乎有点冗长,嗯?
以适当的缩进开始嵌套逻辑,并且笨拙的描述似乎太客气了。
仍然可以使用普通的旧 java 语法。我知道我会因此而被讨厌,但 el 绝不是强制性的。它旨在提高可读性并强制将逻辑和 UI 分离,但它通常不具有更高的可读性,其余的都是关于纪律的。以上是关于如何在 JSTL 中使用 if-else 选项的主要内容,如果未能解决你的问题,请参考以下文章
如何在标准 Bigquery 中使用 if-else 语句?